【问题标题】:Extracting words from Text file (find and replace) using dictionary in Python使用Python中的字典从文本文件中提取单词(查找和替换)
【发布时间】:2020-12-20 01:07:57
【问题描述】:

我在一个文本文件中有以下几行:

some text
some text
fields: [orders.date, orders.collection, orders.cancelled, orders.location,
 orders.arrival, orders.country, orders.delivered, orders.colors,
 orders.complete_time, fight.cancelled, fligt.arrival, flight.delayed]
some text 
some text

我想替换 '.' 之后的每个单词,例如,orders.date 现在应该是 orders.Date_time_stamp。同样,orders.collection 改为orders.Collected_at 由于这是一个 txt 文件,我不知道如何超越括号 [] 然后替换其中的每个单词。

我将单词存储为字典,因此我使用 for 循环。关键是旧词,价值是新词。例如'date'是key和Date_time_stamp是value.同样,集合是键,值是Collected_at

d = {
    'date': 'Date_time_stamp', 
    'collection':'collected_at'
    # And so on...
}

有没有办法解决这个问题?

【问题讨论】:

  • 我建议使用正则表达式提取方括号内的内容,然后用逗号分割给定的结果,然后执行您的操作,例如按每个单词迭代,获取键并用 dict 值替换它并替换它
  • 请从intro tour 重复on topichow to ask。 “告诉我如何解决这个编码问题”不是堆栈溢出问题。你必须做出诚实的尝试,然后然后就你的算法或技术提出一个具体的问题。
  • @Shashank 我以前没有使用过正则表达式,但我会调查一下 :) 谢谢
  • @Prune 嘿,谢谢您的反馈,我实际上为此尝试了很多案例。我从未使用过正则表达式,所以我不确定如何解决这些特定情况。您可以在我之前的查询中查看我的其他部分

标签: python file dictionary replace find


【解决方案1】:

以下是如何使用 for 循环让程序遍历字典,并使用 re.sub 将每个键替换为相应的值:

import re

d = {'date': 'Date_time_stamp', 'collection':'collected_at'}

with open('text.txt', 'r') as f:
    text = f.read()
    for k in d:
        text = re.sub(f'.{k}(?!\w)', f'.{d[k]}', text)

with open('text.txt', 'w') as w:
    w.write(text)

之前:

some text
some text
fields: [orders.date, orders.collection, orders.cancelled, orders.location,
 orders.arrival, orders.country, orders.delivered, orders.colors,
 orders.complete_time, fight.cancelled, fligt.arrival, flight.delayed]
some text 
some text

之后:

some text
some text
fields: [orders.Date_time_stamp, orders.collected_at, orders.cancelled, orders.location,
 orders.arrival, orders.country, orders.delivered, orders.colors,
 orders.complete_time, fight.cancelled, fligt.arrival, flight.delayed]
some text 
some text

【讨论】:

  • 嘿,非常感谢。我想问一下您使用的是否是正则表达式函数?我在哪里可以最好地学习它们?
  • @HamzaShehzad 代码中不涉及正则表达式,只有经典的str.replace 方法。
  • 如果我有一个 d = {'deliver': nono} 并且在文件中我有一个文本:包裹已交付,则您的解决方案存在问题。然后根据您的代码,我得到了包裹未处理的结果-不知何故,它在“已交付”一词中将交付替换为交付
  • @HamzaShehzad 用正则表达式更新。
  • 嘿,它不会改变任何你上一个解决方案比这个更准确的解决方案。它不会更改任何键/值。此外,我们必须替换 '.' 之后 [ ] 之间的单词。您的第一个解决方案做得很好,期待我在上面的评论中提到的问题
猜你喜欢
  • 2015-07-12
  • 2017-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-04
  • 2022-11-19
  • 2014-09-20
相关资源
最近更新 更多