我有一些数据存储在列表中,如果我打印出列表,我会看到以下内容:
.
.
.
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。但这似乎不是最优雅的解决方案。在
使用字典中所有数据的唯一困难是一个真正大的字典可能会变得麻烦。(这就是我们过去所说的“大Ole矩阵”方法。)
解决方法是在字典中构造一个索引,创建key->;offset的映射,使用
tell
方法获取文件偏移值。然后,您可以通过使用seek
方法搜索来再次引用该行。在您可以使用
itertools.groupby()
将序列分成多个子序列。在
^{pr2}$itertools.dropwhile()
也可以,如果你真的只想搜索到那一行你可以把数据读入字典。假设您正在从类似对象
infile
的文件中读取:现在,如果您想阅读“007 A000000 Y”之后的行,可以这样做:
^{pr2}$相关问题 更多 >
编程相关推荐