【问题标题】:replace string with re in a file [duplicate]用re替换文件中的字符串[重复]
【发布时间】:2019-08-19 18:03:22
【问题描述】:

我想使用 python 模块 re 快速取消文件中一些不重要的字符串。

我也尝试过其他模块,各种循环和函数,但我能得到的只是找到字符串,而不是用 re.sub 替换它们。

import re

chat = open("chat.txt"
chatText = chat.read()

def deleteMetaData():
    for line in chatText:
        re.sub("\[\d\d\.\d\d\.\d\d,\s\d\d:\d\d:\d\d\]\sGian\sDogwiler:\s", "", line)

deleteMetaData()

没有错误信息或任何错误信息,什么都没有。我的目标是取消 [20.07.18, 20:23:09] Gian Dogwiler: 在文件的每一行。

【问题讨论】:

  • re.sub 返回一个新字符串。你没有使用它,所以它什么都不做
  • read the docs 看看为什么你不应该忽略re.sub 的返回值。
  • 也可以简单的使用字符串替换函数:line.replace(old, new)。见:geeksforgeeks.org/python-string-replace

标签: python regex


【解决方案1】:

re.sub() 不会自动替换文件中的数据 - 您也需要将其写入文件。 This answer 提供了一个很好的例子;我已经稍微修改了它以匹配您的代码。请注意,您还缺少 chat = open("chat.txt" 行上的近括号。

import re

chat = open("chat.txt")
chatout = open("out.txt", "w")

def deleteMetaData():
  for line in chat:
    chatout.write(re.sub("\[\d\d\.\d\d\.\d\d,\s\d\d:\d\d:\d\d\]\sGian\sDogwiler:\s", "", line))

deleteMetaData()

chat.close()
chatout.close()

完成后不要忘记.close()您的文件。

Try it here!

【讨论】:

  • 谢谢,尼克里德,它现在有点工作,但只有一个字母,即“G”,而不是 [\d\d\.\d\d\.\d\d ,\s\d\d:\d\d:\d\d]\sGian\sDogwiler:\s 编辑:刚刚发现不是每一行都是单独处理的,而是每一个字符。
  • @GDog 听起来您可能正在使用chatText = chat.read 作为您的输入 - 将每个“行”放在一个单独的字符中。尝试在 for 循环中直接从 chat 读取。如果这不是问题,请告诉我。
  • 只在聊天中使用 for line: 没有任何作用:/
  • @GDog 如果您发布更新的代码可能会有所帮助。我包含的示例对您不起作用吗?
  • 哦,它刚刚成功了,感谢您的宝贵时间 :)
猜你喜欢
  • 2017-01-18
  • 1970-01-01
  • 2013-04-05
  • 2011-10-10
  • 2020-03-22
  • 1970-01-01
  • 2021-06-17
  • 2012-10-05
相关资源
最近更新 更多