【发布时间】:2012-06-04 20:05:49
【问题描述】:
我有以下代码,它通过进行正则表达式替换来修改文件 test.tex 的每一行。
import re
import fileinput
regex=re.compile(r'^([^&]*)(&)([^&]*)(&)([^&]*)')
for line in fileinput.input('test.tex',inplace=1):
print regex.sub(r'\3\2\1\4\5',line),
唯一的问题是我只想将替换应用于文件中的某些行,并且无法定义模式来选择正确的行。所以,我想显示每一行并在命令行提示用户,询问是否在当前行进行替换。如果用户输入“y”,则进行替换。如果用户不输入任何内容,则不进行替换。
当然,问题在于通过使用代码inplace=1,我有效地将标准输出重定向到打开的文件。因此,无法将输出(例如询问是否进行替换)显示到未发送到文件的命令行。
有什么想法吗?
【问题讨论】:
-
fileinput不是这项工作的正确工具。只需使用标准的读-修改-写模式 -
@EliBendersky 你能给我举个例子吗?抱歉,我是 Python 新手。
-
想法?是的。不要就地使用文件输入。对文件执行常规 open(),获取用户输入,写入临时文件,完成后移动临时文件以替换原始文件。