如何修改 python 中文件的二进制状态?

How to modify a binary state of a file in python?

我现在真的很绝望
无论我多么努力地尝试、搜索和制作不同的脚本,我仍然无法按照我需要的方式修改它。
这很简单, 我想读取一个文件的第一个字节,以二进制表示它是 00 00 00 10,对其进行补充,使其成为 11 11 11 01 ,然后将其写入它的位置,因此如果文件是两个字节,例如,就像这样:

00 00 00 10 #First byte
01 10 10 10  #Second byte

修改后为:

11 11 11 01 #Complement of the first byte
01 10 10 10  #Second byte remains intact

如果有人能阐明我的问题,我将不胜感激。

听起来你想要的是read-append模式。

with open('file', 'r+b') as file:
    data = f.read(1)[0]
    data = (~data) % 256
    file.seek(0)
    file.write(bytes((data,)))

打开方式为r+br是读取,+表示也可以写入,b表示二进制,所以读取的结果是字节对象而不是字符串。

f.read(1)[0] 读取文件的第一个字节并从生成的字节对象中提取该值作为整数(字节对象的索引值是整数)

~data 是返回字节的否定。由于 python 没有真正的字节类型,我们使用 % 256 将结果包装回 0-255 范围内。

file.seek(0) returns 到文件的开头,以便下一次写入替换第一个字节。寻求以字节为单位的偏移量。

最后把数据写回文件。 bytes 取 0-255 范围内的整数序列,所以我们给它元组 (data,)。或者,我们可以使用整数的 to_bytes 方法并像这样跳过包装:

with open('file', 'r+b') as file:
    data = f.read(1)[0]
    data = ~data
    file.seek(0)
    file.write(data.to_bytes(1, 'little', signed=True))

读取returns一个bytes对象,它是一个字节数组。当您访问一个时,它 returns 每个索引处的值作为整数。要将字节数组转换为单个整数,您可以使用 int.from_bytes。它的参数是 bytes 对象,一个字符串 'big''little' 指示字节顺序,以及一个可选的关键字参数 signed ,它告诉是否将字节解释为带符号或不带符号。要转换回来,您可以使用 .to_bytes 这是 int 对象上的一个方法,它接受三个参数:要转换为的字节数、字节顺序以及是否解释签名数据。

因此,要一次处理多个字节,您可以 read 不同数量的字节。

您可以在读取或写入之前随时seek到文件中的任何字节偏移量。在尝试查找或读取之前,您还可以使用 file.tell() 找出文件中有多少字节。