python - 字符串替换并保存到新文件 (Python v2.7)

标签 python

我试图用文件中的空格替换特定格式的所有行,即将数字/数字/数字(如日期)和数字:数字(如时间)行替换为“”。我想从旧文件中读取,然后将清理后的版本保存为新文件。

这是我到目前为止的代码(我知道它还很遥远):

old_file = open("old_text.txt", "r")
new_file = open("new_text.txt", "w")

print (old_file.read())

for line in old_file.readlines():
    cleaned_line = line.replace("%/%/%", "")
    cleaned_line = line.replace("%:%", "")
    new_file.write(cleaned_line)

old_file.close
new_file.close

感谢您的帮助, 本

最佳答案

I am trying to replace all lines of a certain format with a blanks in a file i.e. replace a line of number/number/number (like a date) and number:number (like a time) with "".

您不能使用 str.replace 来匹配模式或格式,只能匹配文字字符串。

要匹配模式,您需要某种解析器。对于这样的模式,标准库中内置的正则表达式引擎为 re已经足够强大了……但是您需要学习如何为您的模式编写正则表达式。引用文档和 Regular Expression HOWTO如果您已经了解基础知识那就太好了;如果没有,您应该在其他地方搜索教程。

无论如何,您可以这样做(在此过程中修复一些其他问题,其中大部分由 Lego Stormtroopr 解释):

import re

with open("old_text.txt") as old_file, open("new_text.txt", "w") as new_file:
    for line in old_file:
        cleaned_line = re.sub(r'\d+/\d+/\d+', '', line)
        cleaned_line = re.sub(r'\d+:\d+', '', cleaned_line)
        new_file.write(cleaned_line)

另外,请注意,我在第二个 sub 中使用了 cleaned_line;就像在原始代码中一样,再次使用 line 意味着我们会丢失第一次替换的结果。

在不知道您的问题的确切定义的情况下,我不能保证这完全符合您的要求。您是否要清空所有包含模式编号/数字/数字的行,清空所有该模式的行,仅清空该模式并保留剩下的线单独?使用 re,所有这些事情都是可行的,而且非常简单,但它们的完成方式都略有不同。


如果您想变得更棘手,您可以使用单个 re.sub 表达式一次性将所有匹配行替换为空行,而不是一次迭代一个。这意味着稍微复杂的正则表达式与稍微简单的 Python 代码相比,这意味着中型文件的性能可能更好,但大型文件的性能(和上限)较差,等等。如果您无法弄清楚如何自己编写适当的表达式,并且没有需要修复的性能瓶颈,我会坚持使用显式循环。

关于python - 字符串替换并保存到新文件 (Python v2.7),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19128037/

相关文章:

python - 当通过 raise_for_status 和 python-requests 引发 HTTPError 时如何包含响应

python - 对象 A 包含对象 B1 和 B2,B1 包含 C,包含 D。让 D 更改 B2 中某些内容的最佳方式是什么?

python - 图像中的第 4 个 channel 是什么?

python - 如何/在哪里获取股票市场指数(聚合)API 或其他访问方法

python - 在setup.py中为不同版本的python指定不同版本的lz4包

python - 如何将一个类中所有对象共享的变量增加 1?

python - 如果列表中的值重复,则应该在 python 中删除两个值?

python - 如何获取所有行的 QuerySet,每一行都有特定的字段?

python - 将自定义查询集传递给 Django Rest Framework 中的序列化程序

java - 如何通过互联网将 Python 脚本中的数据发送到 Android 应用程序,反之亦然。