2015-10-13 38 views
0

我的問題是用另一個字符串替換文本文件中的字符串。這些關鍵字符串位於名爲word_list的列表中。我試過以下,似乎沒有任何工作。它打印出document.text句子,因爲它的出現,有沒有替代:文檔.txt的Python替換文本文件中的字符串與列表中的值

word_list = {'hi' : 'test', 'how' : 'teddy'} 

    with open("document.txt") as main: 
     words = main.read().split() 

    replaced = [] 
    for y in words: 
     replacement = word_list.get(y, y) 
     replaced.append(replacement) 
    text = ' '.join(word_list.get(y, y) for y in words) 


    print text 

    new_main = open("done.txt", 'w') 
    new_main.write(text) 
    new_main.close() 

內容:

hi you, how is he? 

電流輸出是一樣的文檔.txt當它應該是:

test you, teddy is he? 

任何解決方案/幫助將不勝感激:)

+1

你爲什麼要經歷這一切時,你可以使用'replace'方法 – The6thSense

+0

'word_list'儘管有它的名字,但是它是一個字典......另外,當你在最後創建'text'時,你完全忽略'replace',寧願使用生成器表達式。 – jonrsharpe

+0

和你的代碼適合我嗎? – The6thSense

回答

0
word_list = {'hi' : 'test', 'how' : 'teddy'} 

with open("document.txt") as main: 
    with open('done.txt', 'w') as new_main: 
     input_data = main.read() 
     for key, value in word_list.iteritems(): 
      input_data = input_data.replace(key, value) 

     new_main.write(input_data) 

這將讀取文件的全部內容(如果是大文件,則不是最有效的),然後遍歷搜索並替換字典中的項目,並調用輸入文本中的替換項。完成後,它會將數據寫入新文件。

有些東西用這種方法

  • 記住,如果你的輸入文件很大,這將是緩慢的
  • 你搜索模式也可以匹配字片段,即。 hi會看which,所以你也應該照顧。
+0

'.replace()'不能很好地替換單詞。 – grc

+0

我知道,這就是爲什麼我編輯它以包含一些天真方法的一些注意事項。 –

+0

@ChristianWitts你的解決方案工作,謝謝:)但是,如果我想避免更換其他字符串的單詞片段,這將如何完成? – user47467

1

你似乎要替換的話,這將使用「字」的更自然的定義:

import re 
word_list = {'hi' : 'test', 'how' : 'teddy'} 
with open('document.txt') as main, open('done.txt', 'w') as done: 
    text = main.read() 
    done.write(re.sub(r'\b\w+\b', lambda x: word_list.get(x.group(), x.group()), text)) 
+0

更好地使用'r'\ b(「+」|「.join(word_list)+ r」)\ b「,'作爲模式,因此您不必不必要地替換_every_單詞。另外,如果這些單詞包含不尋常的字符,那麼'\ w'將不起作用。 –

+0

@tobias_k,測試N個變體的每個單詞是O(N),而不必要地替換它是O(1)(儘管可能是一個更長的操作)。平衡所在的地方就是分析問題。 \ w根據定義是一個單詞符號。 –

+0

如果你有N個選擇,每個都必須被檢查,直到找到正確的一個,正則表達式引擎可以做任何事情。 –