繁体   English   中英

Python中的二进制I / O

[英]Binary I/O in Python

我正在尝试在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前缀,这是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'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM