2015-10-13 42 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个选择,每个都必须被检查,直到找到正确的一个,正则表达式引擎可以做任何事情。 –