问题
Whenever a program opens a file it sees the file as binary data. It translates it to a higher interpretive language i.e. octal, hex, ascii , etc. In this case it displays hexadecimal in the LH pane and ansi (windows 7 so it should be CP1252) in the RH pane. The 3 pictures below illustrate the original view, then the desired alteration, and the 3rd is the actual change made by the code:
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)
I have obviously not correctly targeted the write delivery method.
回答1:
Hint: What is the difference between these two lines:
data = binascii.hexlify(f.read(160))
binascii.unhexlify(data)
In Python, string objects are immutable. There is nothing you can call upon data
that will cause the string that data
names to change, because strings do not change. binascii.unhexlify
instead returns a new string - which is why the first statement even works in the first place. If you wanted to .write
the resulting new string, then that's what you should specify to happen in the code - either directly:
fo.write(binascii.unhexlify(data))
or by assigning it back to data
first.
来源:https://stackoverflow.com/questions/21522332/python-unhexlify-not-working-as-expected