2011-04-26 67 views
0

如何刪除在文件中多次出現的單詞,只保留第一個單詞並刪除克隆。刪除在文件中多次出現的單詞

+0

你能搜索/一個普通expressio更換N + – Ethan 2011-04-26 23:09:55

+0

該算法取決於文件的性質:非常非常大或合理的大小,允許加載內存中的內容? – eyquem 2011-04-26 23:32:29

回答

3

一個簡單的算法就是迭代輸入中的所有單詞,將每個單詞添加到之前看到的一組單詞中。如果該單詞已經在該集合中,請將其刪除。

下面是一個例子:

seen_words = set() 
for word in words: 
    if word not in seen_words: 
     print word 
     seen_words.add(word) 
+0

你能舉個例子嗎? – SourD 2011-04-26 23:15:16

+0

由於與換行符保持一致的問題,它不能應用於文件的處理 – eyquem 2011-04-26 23:31:27

+1

是的,這個例子只涉及消除重複。將輸入分成單詞並重新組合單詞是一個單獨的問題,並且Stack Overflow不是一個請寫我的代碼類型的網站。 – hammar 2011-04-26 23:35:18

0

您也可以使用這樣的字典:

mydict = {} 
mylist = [1, 2, 2, 3, 4, 5, 5] 
for item in mylist: 
    mydict[item] = "" 
for item in mydict: 
    print item 

輸出:

1 
2 
3 
4 
5 

但是,當然,你需要的是融入文件讀/寫。

+0

爲什麼你不只是使用一套? – DTing 2011-04-26 23:18:34

+0

1357他不想打印,他想更正文件的內容 – eyquem 2011-04-26 23:33:33

+0

引用自我的文章:「但是當然,您需要將其整合到文件讀取/寫入中。」 – 2011-04-27 00:29:40

0

您可以使用一組:

集( '這是所有單詞的詞都是these'.split())

輸出: '這些', '的',' 所有」, '是', '話'

+1

設置不保存順序! – 2011-04-26 23:27:15

0
fileText = "some words with duplicate words" 
fileWords = fileText.split(" ") 
output = fileWords[0] 
words = [output] 
for word in fileWords: 
    if word not in words: 
     output += " "+word 
     words.append(word) 
+0

「output + =」「+ word''的每次執行包括創建一個具有輸出值」「和單詞連接的新對象。如果文件很大,這對於解釋器來說代表了很多工作。而且,根據「」進行分割會給出可能在其中有換行符的字符串。所以'sun \ nsea'將是一個詞,當'sun'或'sea'出現在一行中間時,它不會被刪除。 – eyquem 2011-04-26 23:44:43

0

如果你的文件是不是非常大,

word='word' 
data=open("file").read() 
ind = data.find(word) 
print data[:ind+len(word)] + data[ind:].replace(word,"")