Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2017, 15:12   #1
GeleosGeleoes
Новичок
Джуниор
 
Регистрация: 14.05.2017
Сообщений: 2
По умолчанию Сравнить 2 бинарных файла

В общем задача такая: открыть 2 бинарных файла и,если так можно вообще, циклом+ветвлением( ну или другим способом,если он есть) сравнить каждый 16-ичный коды и ,если они не равны, выводить в новый текстовый документ.
Ну к примеру ,открываю 2 файла в WinHex . В одном файле код F8 A1 F6 ,а в другом F5 A2 F6. Программка должна сравнить и как результат вывести F6.
Пытаюсь создать саму программку и пробно вывести значения кода,но выводит какую-то билеберду:
-----------------------------------
f = open(r"1.png", "rb")
f.readline(2)
print (f.readline(2))
------------------------------
По идее ,если в файле 1.png 16-ичный код начинается ,допустим ,с F8, то моя программка должна вывести 2 символа,т.е как раз эти F8,но она выводит какой-то текст(((

У меня есть код,который сравнивает все как надо,но проблема в том ,что ,если в середине 2 файлов есть различие,а дальше код одинаков,то эта программка выведет все,что идет после различия ( Т.Е выведет и совпадающий код).
Вот она:
-------------------------------------
file1 = r"d:\\22.jpg"
file2 = r"d:\\11.jpg"

with open(file1, 'br') as of1, open(file2, 'br') as of2:
l1 = of1.read()
l2 = of2.read()

f1_f2 = set(enumerate(l1)) - set(enumerate(l2))
f2_f1 = set(enumerate(l2)) - set(enumerate(l1))

for offset, char in sorted(f1_f2, key=lambda x: x[0]):
print("offset: {}\tchar: {:X}".format(offset, char))

print()

for offset, char in sorted(f2_f1, key=lambda x: x[0]):
print("offset: {}\tchar: {:X}".format(offset, char))
---------------------------------------
Мне же надо,чтобы в новый файл сохранялось ТОЛЬКО различие .
ПОМОГИТЕ ПОЖАЛУЙСТА(((

Последний раз редактировалось GeleosGeleoes; 14.05.2017 в 15:14.
GeleosGeleoes вне форума Ответить с цитированием
Старый 14.05.2017, 15:19   #2
GeleosGeleoes
Новичок
Джуниор
 
Регистрация: 14.05.2017
Сообщений: 2
По умолчанию

Еще можно открыть так:
---------------------
bytelist = bytearray()
with open('01.mp3','rb') as bytes:
for byte in bytes:
bytelist.extend(byte)

file=open('2.dat','wb')
file.write(bytelist)
file.close()
--------------------------
Но опять же, во-первых,не сохраняется именно 16-ичный код (который проверяется в WinHex например) , а во-вторых,я не знаю,что сделать дальше
GeleosGeleoes вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сравнить на эквивалентность 2 двоичных файла Progsenya C# (си шарп) 1 07.05.2011 11:49
Сравнить два файла demiancz Общие вопросы Delphi 22 16.02.2011 15:29
Сравнить два текстовых файла assch Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 17 29.09.2010 14:41
Сравнить 2 txt файла maijor3 Помощь студентам 6 27.04.2010 00:36
Сравнить два файла Aleksandr Microsoft Office Excel 6 07.10.2008 00:22