我正在尝试用文件中的空格替换某种格式的所有行,即用“”替换一行数字/数字/数字(如日期)和数字:数字(如时间)。
您不能使用str.replace
匹配模式或格式,只能匹配文字字符串。
要匹配模式,您需要某种解析器。对于这样的模式,标准库中内置的正则表达式引擎re
已经足够强大了……但是您需要学习如何为您的模式编写正则表达式。如果您已经了解基础知识,参考文档和正则表达式 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)
另外,请注意我cleaned_line
在第二个中使用过sub
;就像在您的原始代码中一样,再次使用line
意味着我们丢失了第一次替换的结果。
在不知道您的问题的确切定义的情况下,我不能保证这完全符合您的要求。您是否要清除包含模式编号/编号/编号的所有行,清除除该模式之外的所有行,仅清除该模式并保留该行的其余部分?所有这些事情都是可行的,而且很容易,re
但他们都做的有点不同。
如果您想变得更棘手,您可以使用单个re.sub
表达式一次将所有匹配行替换为空行,而不是一次迭代它们。这意味着一个稍微复杂的正则表达式与稍微简单的 Python 代码,这意味着对于中等大小的文件可能有更好的性能,但对于大文件来说性能更差(和上限),等等。如果您自己无法弄清楚如何编写适当的表达式,并且没有需要解决的性能瓶颈,我会坚持使用显式循环。