我正在尝试比较来自不同目录的两个文件列表。如果找到匹配项,则应将该文件写入不同的目录。以下是我的代码。
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("%s\n" %(line1))
FO.close()
file1.close()
file2.close()
例如,来自'样本文件夹(文件列表)'的输出1与' sample2(filelist)'中的每个文件进行比较,如果匹配,则应写入' right'文件夹类似于' right_file1.txt'。但该脚本生成了15个文件,从' right_file1.txt'到' right_file15.txt'。当我尝试将一个文件与文件列表进行比较时,它的效果很好。得到这个帮助我。
答案 0 :(得分:0)
我将如何做到这一点。
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开始!如果你想从复制的文件中获取数字,你必须以不同的方式去做。你的方式使得创建文件的起源无法实现..
如果这对您有用,请告诉我。