我试图用文件中的空格替换特定格式的所有行,即将数字/数字/数字(如日期)和数字:数字(如时间)行替换为“”。我想从旧文件中读取,然后将清理后的版本保存为新文件。
这是我到目前为止的代码(我知道它还很遥远):
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/