Python - 从另一个文件中排除一个文件的内容/删除两个文件中的重复行

时间:2016-02-08 09:08:53

标签: performance python-2.7 duplicates text-files large-files

首先,我使用python 2.7.9 ..... 现在,我试图找到一种最有效的方法来比较一个文本文件(文件A)的行与另一个文本文件(文件B)的行,并将文件A独有的所有行写入一个新的文件(文件A \ B)。

实际上,我已经编写了一个简短的脚本来实现这一点,但它已经超出了...... 我需要脚本能够处理高达70mb(每个,A& B)的文件, 这是不可能的,这是不好的'男孩:

import string
naked = string.strip
kiss = ''.join

def main():
    list1 = raw_input("Enter name of .txt-file to clean!\n")
    list2 = raw_input("Enter name of .txt-file to exclude!\n")
    action(list1, list2)
    raw_input("Done!\nPress [ENTER] to exit!")

def action(list1, list2):
    f = open(kiss([list1, '.txt']), "r")
    g = open(kiss([list2, '.txt']), "r")
    h = open(kiss([list1, '_without_', list2, '.txt']), "w")
    h_w = h.write
    reset = g.seek
    found = False
    for i in f:
        found = [True for j in g if naked(i) == naked(j)]
        if not found:
            h_w(kiss([naked(i), '\n']))
        else:
            found = False
        reset(0)
    f.close()
    g.close()
    h.close()

main()

是的...有没有人知道如何更有效地做到这一点?! 提前谢谢!

1 个答案:

答案 0 :(得分:0)

def read_file(filename):
    with open(filename) as src:
        return [line.strip() for line in src.readlines()]


def main():
    list1 = raw_input("Enter name of .txt-file to clean!\n")
    list2 = raw_input("Enter name of .txt-file to exclude!\n")
    file1 = read_file(list1)
    file2 = read_file(list2)
    file3 = open('new_file.txt', 'w')

    for line in file1:
        if line not in file2:
            file3.write(str(line) + '\n')  # writes to a new file

    file3.close()
    print 'Completed'

main()

我不确定这是最快的方法,但它可以解决问题。你可以使用“diff”或“comm”linux命令来获得所需的输出。