Python:从多个文件中收集满足特定条件的相应行

时间:2014-08-06 19:47:40

标签: python file loops with-statement

我有一组相同行数和结构的文本文件。为简单起见,假设它们看起来像这样:

文件1:

2
3
34
56

文件2:

3
43
2
1

文件3:

9
88
3
11

对于每个行号(在本例中为4),我想创建一个字典,其键是数字,其值是一个列表,其中包含符合特定条件的文件中的相应行。

例如,如果条件是该行上的数字应大于10,则结果为:

1: []
2: [43, 88]
3: [34]
4: [56, 11]

我尝试这样编码:

meta_list = dict.fromkeys(range(0, num_lines), [])

for file in files:
    with open(file, 'rb') as f:
          line_num = 1 
          for line in f:
              if condition_met(line):
                  meta_list[line_num].append(float(line))   
              line_num = line_num + 1

但我的逻辑必须关闭!我的示例数据的结果是一堆相同的词组! :

1: [34, 56, 43, 88, 11]
2: [34, 56, 43, 88, 11]
3: [34, 56, 43, 88, 11]
4: [34, 56, 43, 88, 11]

我已经讨论了很长一段时间而感到困惑。也许这很明显,但我在这里错过了什么?

1 个答案:

答案 0 :(得分:2)

试试这个:

meta_list = dict((i, []) for i in range(0, num_lines))

for file in files:
    with open(file, 'rb') as f:
          line_num = 1 
          for line in f:
              if condition_met(line):
                  meta_list[line_num].append(float(line))   
              line_num = line_num + 1

这会为meta_list创建一个新的列表实例。

同时查看collections.defaultdict,您的代码将变为:

from collections import defaultdict

meta_list = defaultdict(list)

for file in files:
    with open(file, 'rb') as f:
          line_num = 1 
          for line in f:
              if condition_met(line):
                  meta_list[line_num].append(float(line))   
              line_num = line_num + 1