带Python字母b delete的二进制文件或其含义是什么?
我刚开始使用Python,希望找到文本文件中任何给定字符的二进制代码。我遇到的问题是,当它打印二进制文件时,二进制文件中有一个“b”带Python字母b delete的二进制文件或其含义是什么?,python,python-2.7,Python,Python 2.7,我刚开始使用Python,希望找到文本文件中任何给定字符的二进制代码。我遇到的问题是,当它打印二进制文件时,二进制文件中有一个“b” file = open("textfile.txt","w") file.write("Hello World ") file.write("This our new text file") file.write("and this is another line. ") file.write("Why? Because we can.") file.close(
file = open("textfile.txt","w")
file.write("Hello World ")
file.write("This our new text file")
file.write("and this is another line. ")
file.write("Why? Because we can.")
file.close()
with open("textfile.txt") as file:
data=file.readline()
data_vector = list(data)
binary_data_vector = map(bin, bytearray(data_vector))
print(binary_data_vector)
这是我当前获得的输出:
['0b1001000', '0b1100101', '0b1101100', '0b1101100', '0b1101111', '0b100000', '0b1010111', '0b1101111', '0b1110010', '0b1101100', '0b1100100', '0b100000', '0b1010100', '0b1101000', '0b1101001', '0b1110011', '0b100000', '0b1101111', '0b1110101', '0b1110010', '0b100000', '0b1101110', '0b1100101', '0b1110111', '0b100000', '0b1110100', '0b1100101', '0b1111000', '0b1110100', '0b100000', '0b1100110', '0b1101001', '0b1101100', '0b1100101', '0b1100001', '0b1101110', '0b1100100', '0b100000', '0b1110100', '0b1101000', '0b1101001', '0b1110011', '0b100000', '0b1101001', '0b1110011', '0b100000', '0b1100001', '0b1101110', '0b1101111', '0b1110100', '0b1101000', '0b1100101', '0b1110010', '0b100000', '0b1101100', '0b1101001', '0b1101110', '0b1100101', '0b101110', '0b100000', '0b1010111', '0b1101000', '0b1111001', '0b111111', '0b100000', '0b1000010', '0b1100101', '0b1100011', '0b1100001', '0b1110101', '0b1110011', '0b1100101', '0b100000', '0b1110111', '0b1100101', '0b100000', '0b1100011', '0b1100001', '0b1101110', '0b101110']
所以我的问题是如何去掉“b”,这样每个字符只打印8位。如果你知道为什么会这样,请解释 函数
bin
返回一个数字的二进制表示形式,前缀为0b
,这使得这种表示形式适合直接输入Python源代码
这不是我们大多数时候想要的,所以一个有效的方法是去掉每个字符串的前2个字符。但是,bin
还有另一个问题:它只编码表示数字所需的位数。这意味着ASCII字符将被编码为7位二进制数字,而我们通常需要8位的表示
另一种方法是使用字符串格式本身来创建表示。.format
字符串方法不仅允许您要求打印数字的二进制(而不是十进制)表示形式,还允许您通过在格式字符串中键入前导零来指定所需的位数:
binary_data_vector = ["{:08b}".format(number) for number in bytearray(data_vector)]
(花点时间看一看——它们一开始看起来很奇怪,但比使用
map
和filter
函数功能强大得多,可读性也强得多——例如,上面这一行需要指定一个lambda函数,以便使用map
编写它)bin(…)
为带有余数位的0b…
形式的整数生成字符串。这样你就可以立即将输出注入到解释器中。一些字符串切片和列表理解bits=[just_bits[2:]对于二进制数据向量中的just_bits]
我使用的是Python2.7.13BTW版本,您不应该在Python2中使用文件作为变量名,因为这会隐藏内置的文件类型。隐藏内置类型名(如list
,str
,set
,文件
,等等)可能会导致带有神秘错误消息的神秘错误。另一件事:我建议此时学习Python3而不是Python2。我可以推断您正在使用Python2,因为在Python3中,您对bytearray的“强制转换”不会按原样工作(但如果文件读取正确,也不需要这样做)