Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 20, 2011 19:26:49

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Открыть файл в hex

Подскажите как открыть файл (.avi) в hex коде
Надо открыть файл видео в виде кода и парсить на нахождение одинаковых сочетаний кода..

Офлайн

#2 Дек. 20, 2011 20:43:33

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Открыть файл в hex

sanodin
открыть файл (.avi) в hex коде
а что
open('some.avi', 'rb')
начинает воспроизводить видео?

Офлайн

#3 Дек. 20, 2011 21:33:26

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Открыть файл в hex

зависает почему то

bytelist = []

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

for byte in filedata:
bytelist.append(byte)
print bytelist

Офлайн

#4 Дек. 20, 2011 21:50:37

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Открыть файл в hex

.read - не самый лучший выбор для чтения больших файлов.
И я бы посоветовал использовать bytearray вместо обычного списка:

bytelist = bytearray()
with open('1.avi','rb') as bytes:
for byte in bytes:
bytelist.extend(byte)

Офлайн

#5 Дек. 20, 2011 22:10:56

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Открыть файл в hex

на выходе

RIFFbF

Офлайн

#6 Дек. 20, 2011 23:12:06

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9776
Репутация: +  844  -
Профиль   Отправить e-mail  

Открыть файл в hex

зачем его вообще в память загружать ?

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

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

используй конечный автомат, который при обнаружении начала переходит в состояние накапливания



Отредактировано (Дек. 20, 2011 23:12:18)

Офлайн

#7 Дек. 21, 2011 15:58:43

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Открыть файл в hex

В общем в этом коде

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)-тип маркера, в списки, в конечном итоге вставить все на место из этих списков и все-на выходе получить тот же самый файл
Все это должно напоминать архиватор в некотором смысле

Офлайн

#8 Дек. 22, 2011 19:36:24

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Открыть файл в 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()
и при этом нормально файл открывается после переименования…в общем эту часть решено…спасибо

Офлайн

#9 Дек. 22, 2011 20:21:37

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Открыть файл в hex

скриптом выношу из бинарного во временной файл 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)-это пять единиц)

Офлайн

#10 Дек. 22, 2011 20:50:52

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Открыть файл в hex

может воспользоваться для записи количества повторений itertools.groupby ?
И кстати может не надо изобретать велосипеды вам просто RLE не подойдет?
http://www.inference.phy.cam.ac.uk/mackay/python/compress/



Отредактировано (Дек. 22, 2011 20:52:47)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version