【问题标题】:compare two list of files between different directories in python比较python中不同目录之间的两个文件列表
【发布时间】:2016-07-19 15:45:42
【问题描述】:

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

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()

例如,'sample folder(filelist)' 中的 output1 与 'sample2(filelist)' 中的每个文件进行比较,如果匹配,则应将其写入 'right' 文件夹,如 'right_file1.txt'。但是脚本正在生成从“right_file1.txt”到“right_file15.txt”的15个文件。当我尝试将一个文件与文件列表进行比较时效果很好。请帮助我,得到这个。

【问题讨论】:

    标签: python file data-structures


    【解决方案1】:

    我会这样做的。

    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 开始!如果您想从复制的文件中获取数字,则必须以不同的方式进行操作。您的方式使创建文件的来源无法追踪..

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

    【讨论】:

    • 但问题是,'output1' 甚至可能匹配 'output2' 或 'output3'!
    • @vignesh 哦,我明白了。所以你想按内容比较文件,而不是按文件名,对吧?
    • 这正是我要找的
    猜你喜欢
    • 1970-01-01
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多