使用python删除txt文件中的重复行(以及包含特定字符串的一些行)的最快方法是什么?

Sha*_*ane 6 python file

txt约为22,000行,约为3.5MB.它中有很多重复的行.我只是想删除重复的行以及一些包含不需要的特定字符串的行.

我的方法是使用readlines()方法将文件读入大列表,然后使用read()方法将文件作为大字符串读取.迭代列表,计算出现次数,用""(空字符串)替换该行.我花了10分钟才完成这份工作?!

有没有快速的方法来做到这一点?

非常感谢!

Rob*_*ney 3

我几乎总是使用生成器进行文件处理。这使得代码快速、易于修改且易于测试。

首先,构建一个删除重复项的生成器:

def remove_duplicates(seq):
    found = set()
    for item in seq:
        if item in found:
            continue
        found.add(item)
        yield item
Run Code Online (Sandbox Code Playgroud)

有效吗?

>>> print "\n".join(remove_duplicates(["aa", "bb", "cc", "aa"]))
aa
bb
cc
Run Code Online (Sandbox Code Playgroud)

显然是这样。接下来,创建一个函数来告诉您一行是否正常:

def is_line_ok(line):
    if "bad text1" in line:
        return False
    if "bad text2" in line:
        return False
    return True
Run Code Online (Sandbox Code Playgroud)

这有效吗?

>>> is_line_ok("this line contains bad text2.")
False
>>> is_line_ok("this line's ok.")
True
>>> 
Run Code Online (Sandbox Code Playgroud)

现在我们可以将remove_duplicatesanditertools.ifilter与我们的函数一起使用:

>>> seq = ["OK", "bad text2", "OK", "Also OK"]
>>> print "\n".join(remove_duplicates(ifilter(is_line_ok, seq)))
OK
Also OK
Run Code Online (Sandbox Code Playgroud)

此方法适用于返回字符串的任何可迭代对象,包括文件:

with open(input_file, 'r') as f_in:
    with open(output_file, 'w') as f_out:
       f_out.writelines(remove_duplicates(ifilter(is_line_ok, f_in)))
Run Code Online (Sandbox Code Playgroud)