【问题标题】:Finding and deleting duplicate lines in a file(the fastest and most efficient way)查找和删除文件中的重复行(最快最有效的方法)
【发布时间】:2016-11-24 15:41:24
【问题描述】:

正如标题所说,我想查找并删除文件中的重复行。这很容易做到……关键是我想知道最快和最有效的方法是什么(假设你有数千兆字节的文件,你想尽可能高效和快速地做到这一点你可以)

如果您知道某种方法...复杂到可以做到这一点,我想知道。我听到了一些类似循环展开的东西,并开始怀疑最简单的事情是最快的,所以我很好奇。

【问题讨论】:

标签: python


【解决方案1】:

最好的解决方案是保留到目前为止看到的一组行,只返回不在其中的行。在python的集合实现中使用了这种方法

def unique_lines(filename):
   lines = open(filename).readlines()
   seen = set()

   for line in lines:
       if line not in seen:
           yield line
           seen.add(line)

然后

for unique_line in unique_lines(filename)
    # do stuff

当然,如果你不关心顺序,你可以直接将整个文本转换成一个集合,像

set(open(filename).readlines())

【讨论】:

  • open(filename).readlines() 不会在内存中创建一个包含所有行的列表吗?看来内存效率不高。您可以改为:f = open(filename); for line in f: ...。此外,处理文件时最好使用with 语句。
【解决方案2】:

使用 python hashlib 将文件中的每一行散列为唯一的散列...并检查一行是否重复,在 set 中查找散列

行可以直接保存在set 中,但是,散列会减少所需的空间。

https://docs.python.org/3/library/hashlib.html

【讨论】:

    猜你喜欢
    • 2017-10-18
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    相关资源
    最近更新 更多