如何比较两个不同文件夹中具有相同名称的两个.text文件的每一行?

时间:2018-01-22 18:09:23

标签: python python-2.7 subprocess

我正在学习python。如果我的问题不符合格式,请提供建议。我想比较位于两个不同文件夹中的两个txt文件的单行。两个文件夹中的文件名相同。到目前为止,我已经写了很多代码。我想请求有人帮我进一步了解这段代码。最后两个for循环是我的困惑,我不知道如何比较两个文件的每一行。

import os

dir1 ="C:/Users/Desktop/abc1-18/"  
dir2 ="C:/Users/Desktop/cde1-18/"

for files in os.listdir(dir1):
    file_name1 = os.path.join(dir1,files)
    if files in os.listdir(dir2):
        file_name2 = os.path.join(dir2,files)

        with open(file_name1, "r") as fi:
          with open(file_name2,"r") as Ri:

            for line1 in fi:
                for line2 in Ri:
                    if line1==line2:
                        print "something"

1 个答案:

答案 0 :(得分:1)

这里的主要问题是,在外循环的一次迭代之后,Ri句柄在内循环中耗尽,所以你必须存储这些行,我建议使用set更快的查找:

with open(file_name1, "r") as fi:
  with open(file_name2,"r") as Ri:
    lines2 = set(Ri)
    for line1 in fi:
        if line1 in lines2:
             print "something"

由于set和...的速度更快,因为第二个文件只读了一次,所以效果很好。

除此之外,您的外环可以从相同的治疗中受益。变化

for files in os.listdir(dir1):
    file_name1 = os.path.join(dir1,files)
    if files in os.listdir(dir2):
        file_name2 = os.path.join(dir2,files)

file2_dir = set(os.listdir(dir2))
for files in os.listdir(dir1):
    file_name1 = os.path.join(dir1,files)
    if file_name1 in file2_dir:
        file_name2 = os.path.join(dir2,files)

避免不断扫描第二个目录,并将结果放入设置加速查找。