从文件中读取二进制数
我试图从包含这种格式的二进制数字列表的文件中读取数据: 0b1111; 0b1010; 0b0101 // 0b1110; 0b0010等等。然后,我想将由“//”分隔的每个部分追加到列表中。每个部分都应该变成一个列表,其中包含由“;”分隔的部分中的所有数字。我终于得到了代码工作,但在修改了完全不同且不相关的代码并扭转了这些变化之后,现在它破裂了。下面是我使用目前,为试图解决这个问题,我没有原始代码后的代码:从文件中读取二进制数
programLoad = open("programs.txt", "r")
programLoadList = programLoad.read()
programList = [p for p in programLoadList.split("//")]
programLoad.close()
for index in range(len(programList)):
programList[index] = [int(n, 2) for n in programList[index].split(";")]
我不会把这里的文件,因为它是非常大的。但是,所有数字都遵循正确的格式,并且在运行时出现错误“int base 2的无效文字”的列表理解失败。
如果您需要更多的信息来帮助,我会很乐意提供。
您可以在一个列表理解这样做:
In [11]: [[int(b, 2) for b in line.split(";")] for line in program_list.split("//")]
Out[11]: [[15, 10, 5], [14, 2]]
我正在使用Python 2.7.8,这可能是我得到的错误的原因:语法无效。 – pengowen123
编辑:我懂了!它试图将空字符串变成二进制数字。该字符串来自文本文件末尾的“//”,这导致它将空的下一行分隔到自己的部分中。感谢您教我关于彼此的理解!另外,你可以在这样的理解中有if/else语句吗? [x * 2 for x if [2,3,4,5]中的x> 2] – pengowen123
@ pengowen123是的,但是如果在最后,那么它是'[x * 2 for [x, 4,5] if x> 2]'。 –
我认为这会工作。只要将每个二进制表示看作一个字符串,并省略前两个字符并将其余文本转换为整数。
programLoad = open("programs.txt", "r")
programLoadList = programLoad.read()
programList = [p for p in programLoadList.split("//")]
programLoad.close()
for index in range(len(programList)):
print programList[index]
programList[index] = [int(n[2:], 2) for n in programList[index].split(";")]
print programList
源代码管理是一件美妙的事情。 –
从错误信息(这似乎缺少n的实际值),看起来像你可能在一行中有两个分号,即没有介于中间的0bxxxx数字。 –
您的输入文件是否包含换行符?如果是这样的话,你将不得不拆分新行和*'//'* –