2014-03-19 63 views
0

我有類似下面的數據行的文本文件:從文本文件中打印重複的行,然後刪除除重複項之外的所有項?

data123||data456 
data146||data269 
data123||data456 
data697||data983 
data123||data456 

我想先打印重複的行,這樣我可以保持一下這些線是創紀錄的。然後我想創建一個新的文本文件,其中我刪除原始文本文件中所有重複行的所有副本。

到目前爲止,我有以下的代碼,但它似乎給我複製個體「數據###」,而不是它包含在整個線路

with open("file.txt") as f: 
    seen = set() 
    for line in f: 
      line_lower =line.lower() 
      if line_lower in seen: 
       print (line) 
      else: 
       seen.add(line_lower) 
+0

工作對我很好,當我用你的代碼。你能用這個例子添加你得到的不好的結果嗎?另外,我會去掉這些行來忽略換行符,如下所示:'line_lower = line.lower()。strip()' – Elisha

回答

0

您可以使用一組:

s=set() 
for line in open("file.txt"): 
    if line in s: 
     print line 
    else: 
     s.add(line) 

然後重寫文件:

with open("file.txt") as f: 
    for line in s: 
     f.write(line) 
+0

只需要說一句,這個解決方案並不保證維護順序 –

0

印刷線,因爲他們沒有火箭科學,所以我重點Ø ñ刪除重複,同時節省順序:

from collections import OrderedDict 

data = """data123||data456 
data146||data269 
data123||data456 
data697||data983 
data123||data456""" 

uniq = OrderedDict((row, None) for row in data.splitlines()).keys() 

uniq結果是沒有重複的行列表:

In [10]: print '\n'.join(uniq) 
    data123||data456 
    data146||data269 
    data697||data983 
相關問題