首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python:从多个文件中收集符合特定条件的相应行

Python:从多个文件中收集符合特定条件的相应行
EN

Stack Overflow用户
提问于 2014-08-06 19:47:40
回答 1查看 37关注 0票数 0

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

档案1:

代码语言:javascript
运行
复制
2
3
34
56

档案2:

代码语言:javascript
运行
复制
3
43
2
1

档案3:

代码语言:javascript
运行
复制
9
88
3
11

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

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

代码语言:javascript
运行
复制
1: []
2: [43, 88]
3: [34]
4: [56, 11]

我试过像这样编写代码:

代码语言:javascript
运行
复制
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

但我的逻辑一定是错的!在我的示例数据上,结果是一堆相同的数据!:

代码语言:javascript
运行
复制
1: [34, 56, 43, 88, 11]
2: [34, 56, 43, 88, 11]
3: [34, 56, 43, 88, 11]
4: [34, 56, 43, 88, 11]

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-06 19:52:45

试试这个:

代码语言:javascript
运行
复制
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创建一个新的list实例。

还可以查看collections.defaultdict,使用它,您的代码将变成:

代码语言:javascript
运行
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25168903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档