繁体   English   中英

如何使这个Python脚本更快?

[英]How to make this python script faster?

我试图从两个列表中找到一个重叠列表。 我首先生成第一个列表

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)

ThiefMasters答案将以任意顺序输出公共行。 如果要以与在一个文件中出现的顺序相同的顺序输出项目,请首先将另一个文件读入一组:

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)

只要没有一个文件太大,就将所有行存储在集合中 ,然后比较这些集合:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM