【发布时间】:2015-02-20 10:08:04
【问题描述】:
我有一个大文本文件,其中有我想要替换的单词。我将这些词放在一个 csv 文件中,因为我不断地添加和更改词,并且不想将这些词放在 python 脚本本身中。每行是我要替换的单词,然后是我要替换的单词。像这样:
A_old,A_new
another word,another new word
something old,something new
hello,bye
我知道如何用 python 的字符串替换功能替换文件中的单个单词,但是当单词列在不同的文件中时我不知道如何执行此操作。我尽了最大努力,但我无法理解如何使用字典/列表/元组。我对 python 比较陌生,直到现在我都使用来自互联网的示例进行管理,但这超出了我的能力范围。我得到了各种各样的错误,比如“不可散列的类型:列表”和“需要一个字符缓冲区对象”。 我尝试的最后一件事是最成功的,因为我没有收到任何错误,但也没有任何反应。这是代码。我敢肯定它很丑,但我希望它不是完全没有希望的。
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))
我这样做的原因是因为我正在编写具有基于成分的索引的食谱,并且我不想要同时包含“胡萝卜”和“胡萝卜”的索引,而是想要更改“胡萝卜”放入“胡萝卜”中,以此类推所有其他成分。 非常感谢您朝正确的方向轻推!
【问题讨论】:
-
一方面,您需要使用
d[key] = [value]来创建列表字典,而不是d[key] = value。 -
但不清楚为什么你有一个列表的字典;这不是正确的数据模型。一个简单的字符串字典就可以了。
-
常规
replace可能不适合此任务。假设您确实整理了 dict 内容,并且最终将文件中的所有“carrot”实例替换为“carrots”。但这也将用“carrotss”替换所有现有的“carrots”实例。replace不只是寻找完整的词来替换;它会很乐意替换部分单词。 -
谢谢。 @Kevin,这不是问题。这是一个用 LaTex 制作的索引,其中每个条目都用感叹号分隔,所以我会搜索“!carrot!”并将其替换为“!carrots!”。 Tom I 对代码的第一部分进行了调整。不确定这是否是你的意思。如果没有,我会去谷歌搜索更多关于这个 dict 的内容..
标签: python csv str-replace