2015-04-17 95 views
0

我想修改一個腳本,以便它將從文本文件中刪除重複的行,只使用該行的標題部分。刪除重複的行只有標題

爲了澄清文本文件中的行是這個樣子:

Title|Image Url|Description|Page Url 

在腳本執行刪除重複的那一刻,但它通過閱讀整條生產線,而不僅僅是第一部分這樣做。文件中的所有行不會完全相同,但有一些會非常相似。

我想要刪除包含相同「標題」的所有行,而不管該行的其餘部分包含哪些行。

這是我一起工作的腳本:

import sys 
from collections import OrderedDict 

infile = "testfile.txt" 
outfile = "outfile.txt" 
inf = open(infile,"r") 
lines = inf.readlines() 

inf.close() 

newset = list(OrderedDict.fromkeys(lines)) 
outf = open(outfile,"w") 
lstline = len(newset) 
for i in range(0,lstline): 
    ln = newset[i] 
    outf.write(ln) 
outf.close() 

到目前爲止,我已經用.split()分裂列表行嘗試。我也嘗試過.readline(lines[0:25]),希望能夠使用字符數限制來達到預期的結果,但目前爲止還沒有運氣。我似乎也無法找到關於我確切問題的任何文檔,所以我被卡住了。

我正在使用Windows 8和Python 2.7.9這個項目,如果有幫助。

回答

0

我對已設置的程序進行了一些更改。首先,我改變了你的文件交互以使用「with」語句,因爲它們非常方便並自動處理你必須寫出的很多功能。其次,我使用set而不是OrderedDict,因爲您基本上只是試圖通過在OrderedDict中使用鍵來模擬設置功能(元素的排他性)。如果標題尚未使用,則將其添加到該設置中,以便它不能再次使用並將該行打印到輸出文件。如果它已被使用,它會繼續。我希望這可以幫助你!

with open("testfile.txt") as infile: 
    with open("outfile.txt",'w') as outfile: 
     titleset = set() 

     for line in infile: 
      title = line.split('|')[0] 
      if title not in titleset: 
       titleset.add(title) 
       outfile.write(line) 
+0

謝謝!這正是我需要的。 – lostintranslation