检查单词是否适合字典中的键,并将该值写入另一个文件(如果它尚未存在)-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

检查单词是否适合字典中的键,并将该值写入另一个文件(如果它尚未存在)

一码平川MACHEL 2019-01-22 10:58:28 853

我希望脚本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次运行代码时,它不应该再次重写所有这些值,因为它们已经在文件中。

分享到
取消 提交回答
全部回答(1)
  • 一码平川MACHEL
    2019-07-17 23:26:11

    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键的额外单词,则可以)。
    处理所有行,如果有替换,则替换单词,否则使用原始单词。

    0 0
云计算
使用钉钉扫一扫加入圈子
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

推荐文章