Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查找和删除文件中的重复行(最快、最有效的方法)_Python - Fatal编程技术网

Python 查找和删除文件中的重复行(最快、最有效的方法)

Python 查找和删除文件中的重复行(最快、最有效的方法),python,Python,正如标题所说,我想查找并删除文件中的重复行。这很容易做到……关键是我想知道最快、最有效的方法是什么(假设你有千兆字节的文件,你想尽可能高效、快速地做到这一点) 如果你知道一些方法…复杂到我想知道的程度。我听到了一些类似循环展开的东西,并开始猜测最简单的事情是最快的,所以我很好奇。最好的解决方案是保留一组迄今为止看到的行,并只返回不在其中的行。这种方法在python的集合实现中使用 def unique_lines(filename): lines = open(filename).read

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


如果你知道一些方法…复杂到我想知道的程度。我听到了一些类似循环展开的东西,并开始猜测最简单的事情是最快的,所以我很好奇。

最好的解决方案是保留一组迄今为止看到的行,并只返回不在其中的行。这种方法在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())

使用python
hashlib
将文件中的每一行散列为唯一的散列。。。并检查一行是否重复,查找
集中的哈希值

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


检查此问题的可能重复:我在您链接的线程中没有看到任何关于性能问题的答案。请将您的问题显示出来。你应该包括一个你有问题的代码,然后我们可以尝试帮助解决具体的问题。您还应该阅读。如果使用python不严格要求,那么
uniq file\u with\u dupes>file\u without\u dupes
可能是最简单、最快的方法。难道
不会打开(filename).readlines()
在内存中创建一个包含所有行的列表吗?这似乎并不缺乏记忆。您可以这样做:
f=open(filename);对于f中的行:…
。另外,处理文件时最好使用
with
语句。