比较python中不同目录之间的两个文件列表

时间:2016-07-19 15:45:43

标签: python file data-structures

我正在尝试比较来自不同目录的两个文件列表。如果找到匹配项,则应将该文件写入不同的目录。以下是我的代码。

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'。当我尝试将一个文件与文件列表进行比较时,它的效果很好。得到这个帮助我。

1 个答案:

答案 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开始!如果你想从复制的文件中获取数字,你必须以不同的方式去做。你的方式使得创建文件的起源无法实现..

如果这对您有用,请告诉我。