gpt4 book ai didi

python - Python 中的二进制 I/O

转载 作者:行者123 更新时间:2023-12-01 04:56:29 25 4
gpt4 key购买 nike

我正在尝试用Python对文件进行二进制读写。我正在尝试自学一些编程(这并不是真正的自学,因为我使用互联网,但无论如何......)。我的问题是,在 Python 中以二进制形式读取文件实际上并没有将这些位输出给我,但似乎已经将其处理为文本。

示例:

我的系统在与脚本相同的文件夹中有一个文件“Test.txt”。

该文件的内容是用记事本编写的以下文本:

Testing Temp "Testing"

这是一小段代码,让我有些困惑:

f=open("Test.txt", "rb")
print(f.read(22))

这会产生以下输出:

b'Testing Temp "Testing"'

但是,我想要字符串形式的位(即由 0 和 1 组成的字符串)作为输出。我怎样才能做到这一点?

最佳答案

你拥有的是一个字节序列(注意开头的b)。您可以使用索引访问每个字节的值。在您的示例中,如果 s=f.read(22)然后s[0]将是84这是 T 的 ASCII 代码.

如果您想获取字节的二进制表示形式,请使用 bin内置:

>>> bin(84)
'0b1010100'

它还添加了 0b prefix 是 python 的二进制文字前缀:

>>> 0b1010100
84

要获取逐位二进制表示,您只需访问每个字节并调用 bin对于每个值:

def to_bits(contents):
return ''.join(bin(byte)[2:].zfill(8) for byte in contents)

结果是:

>>> to_bits(b'Testing Temp "Testing"')
'01010100011001010111001101110100011010010110111001100111001000000101010001100101011011010111000000100000001000100101010001100101011100110111010001101001011011100110011100100010'

请注意,您必须调用zfill(8)因为bin可以返回短于 8 位的表示:

>>> bin(1)[2:]
'1'
>>> bin(1)[2:].zfill(8)
'00000001'

关于python - Python 中的二进制 I/O,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27237322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com