2016-11-24 86 views
2

正如標題所說,我想查找並刪除文件中的重複行。這很容易做到......我想知道什麼是最快和最有效的方式來做到這一點(假設您擁有千兆字節的文件,而且您希望這樣做的效率和速度都如此快你可以)查找和刪除文件中的重複行(最快,最有效的方式)

如果你知道一些方法...複雜,因爲它可以做,我想知道。我聽到一些像循環展開的東西,並開始猜測最簡單的東西是最快的,所以我很好奇。

+0

可能的重複[如何從文件中刪除重複行?](http://stackoverflow.com/questions/1215208/how-might-i-remove-duplicate-lines-from-a-file) –

+0

檢查此以及:http://stackoverflow.com/questions/1444406/how-can-i-delete-duplicate-lines-in-a-file-in-unix – MYGz

+0

我沒有看到任何答案在你鏈接的線程處理性能問題。 – sobek

回答

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

使用Python hashlib哈希文件到一個唯一的哈希每行...並檢查線路是重複查找到哈希在set

行可以直接保存在set中,但散列會減少所需的空間。

相關問題