2017-07-04 54 views
0

我真的不知道如何提出问题,但该文件的旁边有一个数字和一个小数,就像这样(文件名是num.txt):查看数字列表并从另一个文件中获取该数字>

33 0.239 
78 0.298 
85 1.993 
96 0.985 
107 1.323 
108 1.000 

我有,我想找到该文件的某些数字,采取十进制数,并追加到一个列表编号的字符串:

['78','85','108'] 

这里是我的代码到目前为止:

chosen_number = ['78','85','108'] 
memory_list = [] 
for line in open(path/to/num.txt): 
    checker = line[0:2] 
    if not checker in chosen_number: continue 
    dec = line.split()[-1] 
    memory_list.append(float(dec)) 

他们给我的错误是它不在列表中,它们只占3位数字。我不明白为什么会发生这种情况,并想知道如何解决问题。谢谢。

至于错误,没有实际的错误。唯一的问题是他们忽略了两位数字,只能得到三位数字。我希望他们获得2位和3位数字。例如,脚本会通过78和85,与'108'一致。

+0

文件中的所有数字都是十进制的,但左边的是整数,右边的是浮点数。另外,请在您的问题中包含整个错误消息。 – DyZ

+0

''checker''似乎是未定义的。另外:如果您遇到错误,请将完整的追溯添加到您的问题中。 –

+0

@ mpf82检查器已被识别,并且出现错误,但没有错误,但该脚本只是忽略了3位数字,只看到了2位数字。 –

回答

1

您的checker未定义。下面的代码工作。

N.B.我使用了startswith,因为该号码可能出现在该行的其他地方。

chosen_number = ['78','85','108'] 
memory_list = [] 

with open('path/to/num.txt') as f: 
    for line in f: 
     if any(line.startswith(i) for i in chosen_number): 
      memory_list.append(float(line.split()[1])) 

print(memory_list) 

输出:

[0.298, 1.993, 1.0] 
0

,下面这些应该工作:

chosen_number = ['78','85','108'] 
memory_list = [] 

with open('num.txt') as f_input: 
    for line in f_input: 
     v1, v2 = line.split() 

     if v1 in chosen_number: 
      memory_list.append(float(v2)) 

print memory_list 

给你:

[0.298, 1.993, 1.0] 

而且,最好是使用with语句时处理文件,以便文件在事后自动关闭。

0

尝试使用此代码:

chosen_number = ['78 ', '85 ', '108 '] 
memory_list = [] 

for line in open("num.txt"): 
    for num in chosen_number: 
     if num in line: 
      dec = line.split()[-1] 
      memory_list.append(float(dec)) 

chosen number,我宣布后用空格号:'85 '。否则,当找到0.985时,if条件将成立,因为它们被用作字符串。我希望,我很清楚。

相关问题