Python中的程序控制流

2024-06-16 07:52:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些数据存储在列表中,如果我打印出列表,我会看到以下内容:

.
.
.
007 A000000 Y
007 B000000  5
007 C010100  1
007 C020100 ACORN FUND
007 C030100 N
007 C010200  2
007 C020200 ACORN INTERNATIONAL
007 C030200 N
007 C010300  3
007 C020300 ACORN USA
007 C030300 N
007 C010400  4
.
.
.

序列前后的点代表有其他数据结构相似,但可能不是第七项(007)的一部分。如果第七项中的第一个值是“007 a000000y”,那么我想创建一些数据项的字典列表。我可以通过运行列表中的所有项并将它们的值与变量的一些测试值进行比较,就可以做到这一点。例如,一行代码,如:

^{pr2}$

但我想做的是

if dataLine.find(''007 A000000 Y')==0:
    READ THE NEXT LINE RIGHT HERE

现在我必须在每个循环中遍历整个列表

我想缩短处理时间,因为我有大约60K个文件,每个文件中有500到5000行。在

我已经考虑过创建另一个对列表的引用并计算数据行,直到数据线.查找(''007 A000000 Y')==0。但这似乎不是最优雅的解决方案。在


Tags: 文件数据列表我会fundinternationalacorna000000
3条回答

使用字典中所有数据的唯一困难是一个真正大的字典可能会变得麻烦。(这就是我们过去所说的“大Ole矩阵”方法。)

解决方法是在字典中构造一个索引,创建key->;offset的映射,使用tell方法获取文件偏移值。然后,您可以通过使用seek方法搜索来再次引用该行。在

您可以使用itertools.groupby()将序列分成多个子序列。在

import itertools

for key, subseq in itertools.groupby(tempans, lambda s: s.partition(' ')[0]):
    if key == '007':
    for dataLine in subseq:
        if dataLine.startswith('007 B'):
        numberOfSeries = int(dataLine.split()[2])

itertools.dropwhile()也可以,如果你真的只想搜索到那一行

^{pr2}$

你可以把数据读入字典。假设您正在从类似对象infile的文件中读取:

from collections import defaultdict
data = defaultdict(list)
for line in infile:
    elements = line.strip().split()
    data[elements[0]].append(tuple(elements[1:]))

现在,如果您想阅读“007 A000000 Y”之后的行,可以这样做:

^{pr2}$

相关问题 更多 >