2014-02-03 1 views
1

Всякий раз, когда программа открывает файл, файл видит двоичные данные. Он переводит его на более высокий интерпретирующий язык, например восьмеричный, шестнадцатеричный, ascii и т. Д. В этом случае он отображает шестнадцатеричный элемент в панели LH и ansi (окна 7, поэтому он должен быть CP1252) в области RH. В 3 фотографии ниже иллюстрируют оригинальный вид, то желаемый изменение, а третий является фактическое изменение, сделанное по коду:python unhexlify не работает как ожидалось

enter image description here

enter image description here

enter image description here

with open(tar,'rb') as f: 
data = binascii.hexlify(f.read(160)) 
if old in data: 
    print 'found!' 
    data = data.replace(old, new) 
else: 
    print 'not found' 
with open(tar+'new', 'wb') as fo: 
    binascii.unhexlify(data) 
    fo.write(data) 

У меня очевидно, неправильно направлено на способ доставки.

+0

'binascii.unhexlify (data)' отсутствует присваивание. Вы, кажется, записываете только данные * hexlified *. – monkut

ответ

3

Подсказка: В чем разница между этими двумя линиями:

data = binascii.hexlify(f.read(160)) 

binascii.unhexlify(data) 

В Python, строковые объекты являются неизменяемыми. Нет ничего, что можно было бы назвать data, что приведет к тому, что строки будут изменены именами data, потому что строки не меняются. binascii.unhexlify вместо этого возвращает строку - вот почему первое заявление даже работает в первую очередь. Если вы хотите, чтобы .write полученную новую строку, то это то, что вы должны указать, произойдет в коде - либо непосредственно:

fo.write(binascii.unhexlify(data)) 

или путем присвоения его обратно data первым.

+0

Я пошел с опцией fo.write (binascii.unhexlify (data)). Бесконечно благодарен. –