从文件中读取二进制数

问题描述:

我试图从包含这种格式的二进制数字列表的文件中读取数据: 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的无效文字”的列表理解失败。

如果您需要更多的信息来帮助,我会很乐意提供。

+4

源代码管理是一件美妙的事情。 –

+0

从错误信息(这似乎缺少n的实际值),看起来像你可能在一行中有两个分号,即没有介于中间的0bxxxx数字。 –

+0

您的输入文件是否包含换行符?如果是这样的话,你将不得不拆分新行和*'//'* –

您可以在一个列表理解这样做:

In [11]: [[int(b, 2) for b in line.split(";")] for line in program_list.split("//")] 
Out[11]: [[15, 10, 5], [14, 2]] 
+0

我正在使用Python 2.7.8,这可能是我得到的错误的原因:语法无效。 – pengowen123

+0

编辑:我懂了!它试图将空字符串变成二进制数字。该字符串来自文本文件末尾的“//”,这导致它将空的下一行分隔到自己的部分中。感谢您教我关于彼此的理解!另外,你可以在这样的理解中有if/else语句吗? [x * 2 for x if [2,3,4,5]中的x> 2] – pengowen123

+0

@ 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