我正在尝试比较来自不同目录的两个文件列表。如果找到匹配项,则应将文件写入其他目录。下面是我的代码。
filelist= ['sample2\output_1.txt','sample2\output_2.txt','sample3\asn_todlx_mf_output_3.txt']
filelist2 = ['sample\output_1.txt','sample\output_3.txt','sample\output_7.txt','sample\output_2.txt','sample1\output_3.txt']
a = 1
for name in filelist:
a = a + 1
for x in filelist2 :
file1 = open(x, 'r')
file2 = open(name,'r')
FO = open('right\right_file'+str(a)+'.txt', 'w')
for line1 in file1:
for line2 in file2:
if line1 == line2:
FO.write("%sn" %(line1))
FO.close()
file1.close()
file2.close()
例如,将"sample folder(filelist)"中的output1与"sample2(filelist"中的每个文件进行比较,如果匹配,则应将其写入"right"文件夹,如"right_file1.txt"。但该脚本生成了从"rightfiles1.txt"到"rightfile15.txt"的15个文件。当我尝试将一个文件与文件列表进行比较时,效果很好。请帮我拿这个。
我就是这么做的。
filelist1 = ['sample2\output_1.txt','sample2\output_2.txt','sample3\asn_todlx_mf_output_3.txt']
filelist2 = ['sample\output_1.txt','sample\output_3.txt','sample\output_7.txt','sample\output_2.txt','sample1\output_3.txt']
dir1 = filelist1[0].split('\')[:-1]
filelist1 = [x.split('\')[-1] for x in filelist1]
dir2 = filelist2[0].split('\')[:-1]
filelist2 = [x.split('\')[-1] for x in filelist2]
common = [x for x in filelist1 if x in filelist2]
print(common)
# ['output_1.txt', 'output_2.txt']
a = 1
for file in common:
a += 1
with open(dir1 + '\' + file) as f_in:
contents = f_in.readlines()
with open('right\right_file' + str(a) + '.txt', 'w') as f_out:
f_out.write(contents)
最初,我查找这两个列表之间常见的文件,并将它们的名称存储在common
中。然后,对于common
列表中的所有文件,我在您提到的其他目录中创建它们的副本。请注意with
的使用,它处理文件的关闭和刷新。使用它而不是手动管理文件,除非你有理由不这样做。
最后,我没有得到迭代器a
背后的逻辑,但我只是从您那里复制了它。它从值2开始!如果你想从复制的文件中获取数字,你必须采取不同的做法。您的方式使创建的文件的来源无法追踪。。
如果这对你有用,请告诉我。