Найти - Пользователи
Полная версия: Открыть файл в hex
Начало » Python для новичков » Открыть файл в hex
1 2
sanodin
Подскажите как открыть файл (.avi) в hex коде
Надо открыть файл видео в виде кода и парсить на нахождение одинаковых сочетаний кода..
s0rg
sanodin
открыть файл (.avi) в hex коде
а что
open('some.avi', 'rb')
начинает воспроизводить видео?
sanodin
зависает почему то
bytelist = []

bytes = open('1.avi','rb')
filedata = bytes.read()

for byte in filedata:
bytelist.append(byte)
print bytelist
s0rg
.read - не самый лучший выбор для чтения больших файлов.
И я бы посоветовал использовать bytearray вместо обычного списка:
bytelist = bytearray()
with open('1.avi','rb') as bytes:
for byte in bytes:
bytelist.extend(byte)
sanodin
на выходе
RIFFbF
py.user.next
зачем его вообще в память загружать ?

sanodin
зависает почему то
потому что файл загружается в память

если использовать .read(n), то можно пропустить подходящий фрагмент
например, поиск слова abcd может не сработать, когда
.read(n) -> aaaaaabc
.read(n) -> deeeeeeee
то есть нужный фрагмент есть, но он разделён между строками
(блочное чтение происходит быстрее, чем посимвольное)

используй конечный автомат, который при обнаружении начала переходит в состояние накапливания
sanodin
В общем в этом коде
bytelist = []
f = open('1.txt', 'rb').read()
bytelist = [ ord(c) for c in f]
print(bytelist)
file=open('2.dat','wb')
file.write(str(bytelist))
file.close()
все нормально если файл небольшой.
Но при большом объеме тупо виснет, понимаю что идет в память .
Если объясню задачу может лучше будет:
надо в коде найти одинаковые сочетания,не заданные ,например(112), вырезать их поставив
типа маркера на место вырезанного кода,записать эти вырезанные участки например(112)-код,(4)-тип маркера, в списки, в конечном итоге вставить все на место из этих списков и все-на выходе получить тот же самый файл
Все это должно напоминать архиватор в некотором смысле
sanodin
Извиняюсь работает скрипт
bytelist = bytearray()
with open('01.mp3','rb') as bytes:
for byte in bytes:
bytelist.extend(byte)

file=open('2.dat','wb')
file.write(str(bytelist))
file.close()
и при этом нормально файл открывается после переименования…в общем эту часть решено…спасибо
sanodin
скриптом выношу из бинарного во временной файл hex
bytelist = bytearray()
with open('01.mp3','rb') as bytes:
for byte in bytes:
bytelist.extend(byte)

file=open('2.dat','wb')
file.write(str(bytelist))
file.close()


file=open('2.dat','rb')
data=file.read()
file.close()

file=open('2.dat','wb')
file.write(str(data.encode('hex')))
file.close()
подскажите алгоритм поиска одинаковых сочетаний(например пять единиц или семь F), потом надо вырезать это из кода,поставив допустим точку и цифру 1(типа метки),а сочетание вынести в начало временного файла ,(типа (.1)-это пять единиц)
doza_and
может воспользоваться для записи количества повторений itertools.groupby ?
И кстати может не надо изобретать велосипеды вам просто RLE не подойдет?
http://www.inference.phy.cam.ac.uk/mackay/python/compress/
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB