我正在尝试二进制读取和写入Python中的文件。我正在尝试教自己一些编程(它不是真正教我自己,因为我使用互联网,但无论如何......)。我的问题是用二进制文件读取Python中的文件实际上并没有向我输出这些位,但似乎已经将它处理成文本了。
示例:
我的系统有一个文件" Test.txt"与脚本位于同一文件夹中。
此文件的内容是用记事本写的以下文字:
Testing Temp "Testing"
这是代码的一小部分,让我有些困惑:
f=open("Test.txt", "rb")
print(f.read(22))
这导致以下输出:
b'Testing Temp "Testing"'
但是,我想要一个字符串形式的位(所以字符串为0' s和1' s)作为输出。我怎么能这样做?
答案 0 :(得分:2)
你拥有的是一系列字节(注意开头的b
)。
您可以使用索引访问每个字节的值。在您的示例中,如果s=f.read(22)
那么s[0]
将是84
,这是T
的ASCII代码。
如果要获取字节的二进制表示,请使用内置的bin
:
>>> bin(84)
'0b1010100'
它还添加了0b
前缀,它是二进制文字的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'