我希望脚本shortkey="(here)"从某个文件中搜索内部的关键字,然后检查字典中是否存在这样的单词,如果存在,则从字典中获取该单词的值并将其写入新文件中。出于某种原因,我的代码不起作用......
另外,如何检查值是否重复?即如果已经goodmorning写入newfile.txt,则不要第二次重写。
keyword = {
"shortkey":"longer sentence",
"gm":"goodmorning",
"etc":"etcetera"
}
with open('file.txt', 'r') as file:
with open('newfile.txt', 'a') as newfile:
lines = file.readlines()
for line in lines:
if 'shortkey="' in line:
x = line.split('"')[1].split()
if x == keyword.keys():
for x, replacement in keyword.items():
newfile.write(replacement)
里面的文字file.txt:
shortkey="gm gm gm etc shortkey novalue"
shortkey="gm"
预期产量newfile.txt:
goodmorning etcetera longer sentence
当我第n次运行代码时,它不应该再次重写所有这些值,因为它们已经在文件中。
An OrderedDict将允许您维护订单,而set则不会。在我们将密钥写入新文件之后,我们可以将键值设置为空字符串以避免重写它。
from collections import OrderedDict
keyword = {
"shortkey":"longer sentence",
"gm":"goodmorning",
"etc":"etcetera"
}
with open('file.txt', 'r') as file:
with open('newfile.txt', 'a') as newfile:
lines = file.readlines()
for line in lines:
if 'shortkey="' in line:
to_replace = line.split('"')[1].split()
to_replace = OrderedDict.fromkeys(to_replace)
for key in to_replace:
if key in keyword:
newfile.write(keyword[key] + ' ')
keyword[key] = ''
['gm', 'gm', 'gm', 'etc', 'shortkey', 'novalue']拆分后,文件中的第一个样本行将生成。由于keyword.keys()以下几个原因,这不等于:
gm在单词列表中重复多次,但只在dict中出现一次。(您可以通过将比较的两侧包装在a中set()来删除重复值来解决此问题。)
novalue 在单词列表中但不在词典中。
单词列表很可能与dict键的顺序不同。(同样,你可以通过使用来解决这个问题set(),因为集合是无序的。)
你的意图是什么?
仅处理每个单词是dict键的行,每个单词键都在行中。
仅处理每个单词都是dict键的行(如果dict有额外的未使用键,则可以。)
仅处理包含所有dict键的行(如果该行具有不是dict键的额外单词,则可以)。
处理所有行,如果有替换,则替换单词,否则使用原始单词。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。