我有一个大文本文件,其中有我要替换的单词。我将这些单词放在csv文件中,因为我不断添加和更改单词,并且不希望将单词放在python脚本本身中。在每一行上都有一个我要替换的单词,后跟我要替换它的单词。像这样:
A_old,A_new
another word,another new word
something old,something new
hello,bye
我知道如何用python替换文件中的单个单词和字符串替换功能,但是当单词列在不同的文件中时,我不知道怎么做。我尽我所能,但我无法解决如何使用词典/列表/元组的问题。我对python很陌生,直到现在我还是通过互联网上的例子进行管理,但这超出了我的能力范围。我遇到了各种各样的错误,例如' unhashable类型:list'并期望一个字符缓冲对象'。 我尝试的最后一件事是最成功的,因为我没有得到任何错误,但后来也没有发生任何事情。这是代码。我确定它很难看,但我希望它并非完全没有希望。
reader = csv.reader(open('words.csv', 'r'))
d = {}
for row in reader:
key, value = row
d[key] = value
newwords = str(d.keys())
oldwords = str(d.values())
with open('new.txt', 'wt') as outfile:
with open('old.txt', 'rt') as infile:
for line in infile:
outfile.write(line.replace(oldwords,newwords))
我这样做的原因是因为我正在制作一个带有基于成分的索引的食谱,而且我不想要一个带有胡萝卜'和胡萝卜相反,我想改变胡萝卜'进入'胡萝卜'等所有其他成分。 非常感谢一群人朝着正确的方向努力!
答案 0 :(得分:2)
首先从'word.csv'中创建对(old_word,new_word)的列表:
old_new = [i.strip().split(',') for i in open('words.csv')]
然后,您可以逐行替换:
with open('new.txt', 'w') as outfile, open('old.txt') as infile:
for line in infile:
for oldword, newword in old_new:
line = line.replace(oldword, newword)
outfile.write(line)
或立即在整个文件中:
with open('new.txt', 'w') as outfile, open('old.txt') as infile:
txt = infile.read()
for oldword, newword in old_new:
txt = txt.replace(oldword, newword)
outfile.write(txt)
但你必须一次更换一个单词。
答案 1 :(得分:0)
在您的代码示例中,您将替换单词对读入字典,然后读入带有键和值的两个列表。我不确定为什么。
我建议将替换单词读入元组列表。
with open('words.csv', 'rb') as rep_words:
rep_list = []
for rep_line in rep_words:
rep_list.append(tuple(rep_line.strip().split(',')))
然后您可以打开old.txt
和new.txt
文件并使用嵌套for循环执行替换
with open('old.txt', 'rb') as old_text:
with open('new.txt', 'wb') as new_text:
for read_line in old_text:
new_line = read_line
for old_word, new in rep_list:
new_line = new_line.replace(old_word, new_word))
new_text.write(new_line)