[英]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.