尝试查找并替换字符串列表(由新行分隔),例如
aba
abanga
abaptiston
abarelix
使用像
这样的列表aba
aca
ada
这样,如果第二个列表中的项目出现在第一个列表中,则应将其删除。
我有一半的代码
def replace_all(text, dic):
for i, j in dic.iteritems():
text = text.replace(i, j)
return text
with open("words.txt", "r") as f:
content = f.readlines()
str = ''.join(str(e) for e in content) #list may include numbers
delet = {"aba":"", "aca":"", "ada":"",}
txt = replace_all(str, delet)
f = open("deltedwords.txt","w")
f.write(txt)
不幸的是,这会捕获部分字符串的误报,因此最终结果将是
nga
ptiston
relix
尝试在被搜索的单词之前添加空格或其他字符并不起作用,因为它往往只会产生漏报。
答案 0 :(得分:1)
你可以简单地过滤,但我认为如果你只是删除条目就不需要字典。
如果订单无关紧要,请使用set
:
>>> content = set(['aba', 'abanga', 'abaptiston', 'abarelix'])
>>> unwanted_words = set(['aba', 'aca', 'ada'])
>>> content.difference(unwanted_words)
set(['abanga', 'abarelix', 'abaptiston'])
如果是,请使用列表理解
>>> content = ['aba', 'abanga', 'abaptiston', 'abarelix']
>>> unwanted_words = ['aba', 'aca', 'ada']
>>> [word for word in content if word not in unwanted_words]
['abanga', 'abaptiston', 'abarelix']
答案 1 :(得分:1)
如何使用:
content_without_keywords = filter(lambda x: x.strip() not in delet.keys(), content)
txt = ''.join(str(e) for e in content_without_keywords)
仅删除完全匹配的行。