Python中的二进制I / O.

时间:2014-12-01 21:07:43

标签: python python-3.x io binary

我正在尝试二进制读取和写入Python中的文件。我正在尝试教自己一些编程(它不是真正教我自己,因为我使用互联网,但无论如何......)。我的问题是用二进制文件读取Python中的文件实际上并没有向我输出这些位,但似乎已经将它处理成文本了。

示例:

我的系统有一个文件" Test.txt"与脚本位于同一文件夹中。

此文件的内容是用记事本写的以下文字:

Testing Temp "Testing"

这是代码的一小部分,让我有些困惑:

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

这导致以下输出:

b'Testing Temp "Testing"'

但是,我想要一个字符串形式的位(所以字符串为0' s和1' s)作为输出。我怎么能这样做?

1 个答案:

答案 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'