Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带Python字母b delete的二进制文件或其含义是什么?_Python_Python 2.7 - Fatal编程技术网

带Python字母b delete的二进制文件或其含义是什么?

带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(

我刚开始使用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()
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的“强制转换”不会按原样工作(但如果文件读取正确,也不需要这样做)