Найти - Пользователи
Полная версия: Сравнить 2 бинарных файла
Начало » Python для новичков » Сравнить 2 бинарных файла
1
Geleosgeleos
Здравствуйте ,форумчане! Мне нужна помощь!
Имею 2 бинарных файла . К примеру,я открыл их в WinHex ,и в одном файле у меня код “ FF D8 FF”, а в другом “A1 B7 DD”. мне нужно,чтобы python сравнил их и разницу из второго файла кинул в новый документ. Т.е по моему примеру выйдет “”A1 B7 DD“. Если же будет похожий код, например в 1 файле ”DD АА D8“ ,а во втором файле ”DD AA D8 FF“, то должно вывести ”FF". В инете не нашел нужную инфу, да и + новичек в питоне
Помогите написать код!
Geleosgeleos
нахимичил и попробовал сам написать:
Получилось так:

import struct
file1=open('d:\\22.jpg','wb')
file2=open('d:\\11.jpg','wb')
file1.write(struct.pack('x'))
file2.write(struct.pack('x'))
diff = difflib.ndiff(file1.readlines(), file2.readlines())
delta = ‘'.join(x for x in diff if x.startswith(’+ ‘))
f = open(’3.txt','w')
f.write(delta)


но ,во-первых, в строке“”“ file.write(struct.pack('x')) ”“” я не знаю,что написать,чтобы весь 16-ричный код вписало ,а не побайтово(ведь там может быть огромный 16-ричный код ,если открыть через WinHex) ( https://docs.python.org/3/library/struct.html , тема 7.1.2.2. Format Characters)
и во-вторых, у меня ругается питон на сам код((
py.user.next
Geleosgeleos
Имею 2 бинарных файла . К примеру,я открыл их в WinHex ,и в одном файле у меня код “ FF D8 FF”, а в другом “A1 B7 DD”. мне нужно,чтобы python сравнил их и разницу из второго файла кинул в новый документ.
А зачем тебе это надо? Ты взялся за задачу, которая для тебя неподъёмная. Так ещё и неясно, где это может понадобиться. Скорее всего, то, что ты пытаешься сделать, делается вообще по-другому.

Судя по тому, что ты описал, если у тебя в одном файле “AA”, а в другом файле “AA 00 00 00 AA 00 00 00”, то в результирующий файл запишется “00 00 00 AA 00 00 00”. Так вот, какой в этом смысл? Что ты будешь делать со строкой, если она не целостная?

Так что выглядит всё так, будто ты делаешь что-то не то.
Geleosgeleos
Такое задание мне дал препод в целях изучения питона. Правда я тоже не знаю,в чем его смысл
py.user.next
Напиши тогда задание точно.
JOHN_16
либо задание точно, либо менять препода
Geleosgeleos
В общем нашел верное решение :
 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))

Но появилась проблема. Всю разницу он выводит в окне,а мне надо,чтобы сохранил в текстовый файл. Можно ли это как-то сделать,не меняя код?
Попробовал ввести так:
 c = open('3.txt')
c.write("offset: {}\tchar: {:X}".format(offset, char))

но ,ясное дело,ничего не получилось(
vic57
Geleosgeleos
c = open('3.txt')
https://pythonworld.ru/tipy-dannyx-v-python/fajly-rabota-s-fajlami.html
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