如何使这个python脚本更快?

时间:2012-04-21 12:49:54

标签: python

我试图从两组列表中找到重叠列表。 我首先通过

生成第一个列表
while True:
    line=f.readline()
    if not line:
        break
    list_1.append(line)

并使用此列表扫描第二个文件:

while True:
    line1=f1.readline()
    if not line1:
        break
    for i in list_1:
        if i==line1[:17]:
            list_2.append(line1)

3 个答案:

答案 0 :(得分:4)

ThiefMaster答案将以任意顺序输出公共线。如果您希望输出的项目与其中一个文件中显示的顺序相同,请先将其他文件读入一个集合中:

with open("file1.txt") as f:
    file1_set = set(f)

然后搜索控制订单的文件:

with open("file2.txt") as f:
    list2 = [line for line in f if line in file1_set]

如果生成的list2不适合内存(我猜这是相当遥远的),我们仍然可以通过将结果连续写回输出文件来使其工作:

with open("file2.txt") as f:
    with open("out.txt", "w") as out:
        for line in f:
            if line in file1_set:
                out.write(line)

答案 1 :(得分:3)

只要没有任何文件过大,请将所有行存储在sets中,然后比较这些集:

lines_1 = set(f)
lines_2 = set(f1)
lines_in_both = lines_1 & lines_2

答案 2 :(得分:2)

如果您尝试在两个文件中找到差异,您还可以使用difflib模块,该模块包含在python标准库中。该模块提供用于比较序列的类和函数。它可以用于例如比较文件,并且可以以各种格式产生差异信息,包括HTML和上下文以及统一差异。您可以在difflib documentation中找到有用的比较方法。

difflib.SequenceMatcher(None, file1.read(), file2.read())