我正在学习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"
答案 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)
避免不断扫描第二个目录,并将结果放入设置加速查找。