1

每当程序打开文件时,它都会将该文件视为二进制数据。它将它翻译成更高的解释性语言,即八进制、十六进制、ascii 等。在这种情况下,它在左侧窗格中显示十六进制,在右侧窗格中显示 ansi(Windows 7,因此它应该是 CP1252)。下面的 3 张图片说明了原始视图,然后是所需的更改,第 3 张是代码所做的实际更改:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

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)

我显然没有正确定位写入传递方法。

4

1 回答 1

3

提示:这两行有什么区别:

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

binascii.unhexlify(data)

在 Python 中,字符串对象是不可变的。您可以调用的任何内容都data不会导致data名称更改的字符串,因为字符串不会更改。binascii.unhexlify而是返回一个字符串 - 这就是为什么第一个语句甚至首先起作用的原因。如果您想要.write生成的新字符串,那么这就是您应该在代码中指定发生的事情 - 或者直接:

fo.write(binascii.unhexlify(data))

或将其分配回data第一个。

于 2014-02-03T10:06:14.517 回答