【问题标题】:Looking at a list of numbers and getting that number from another file>查看数字列表并从另一个文件中获取该数字>
【发布时间】:2017-07-04 07:11:58
【问题描述】:

我真的不知道如何表达这个问题,但我有这个文件,旁边有一个数字和一个小数,就像这样(文件名是 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' 的行。

【问题讨论】:

  • 文件中的所有数字都是十进制的,但左边的数字是整数,右边的数字是浮点数。另外,请在您的问题中包含整个错误消息。
  • checker 似乎未定义。另外:如果您遇到错误,请将完整的回溯添加到您的问题中。
  • @mpf82 检查器已被识别,对于错误,没有错误,但脚本只是忽略 3 位数字,只查看 2 位数字。

标签: python list memory append


【解决方案1】:

您的checker 未定义。下面的代码有效。

注意我使用了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]

【讨论】:

    【解决方案2】:

    以下应该可以工作:

    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 语句,以便之后自动关闭文件。

    【讨论】:

      【解决方案3】:

      尝试使用此代码:

      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 条件为真,因为它们被用作字符串。我希望,我已经足够清楚了。

      【讨论】:

        猜你喜欢
        • 2016-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-17
        相关资源
        最近更新 更多