如何有效地交叉匹配两个ASCII目录?

时间:2015-05-06 05:08:32

标签: python file python-2.7

我有两个带有列数据的ASCII文本文件。这两个文件的第一列是两个文件一致的“名称”。一个文件有大约6000行,另一个文件只有800行。没有采用for line in file.readlines():方法 - 例如,

with open('big_file.txt') as catalogue:
with open('small_file.txt') as targets:
    for tline in targets.readlines()[2:]:
        name = tline.split()[0]

        for cline in catalogue.readlines()[8:]:
            if name == cline.split()[0]
                print cline
                catalogue.seek(0)
                break

是否有一种有效的方法只返回较小文件中出现的行(或行)(也使用'name'作为检查)?

如果一次只有一行file.write(matching_line),可以创建第三个文件,其中包含来自大文件的所有信息,仅用于小文件中的对象,这是没关系的。< / p>

1 个答案:

答案 0 :(得分:4)

for line in file.readlines()本质上并不坏。你遇到的嵌套循环有什么不好。您可以使用set跟踪并检查较小文件中的所有名称:

s = set()
for line in targets:
    s.add(line.split()[0])

然后,只需遍历较大的文件并检查名称是否在s

for line in catalogue:
    if line.split()[0] in s:
        print line