使用 fileinput (Python) 进行搜索和替换,同时向控制台发送消息
Posted
技术标签:
【中文标题】使用 fileinput (Python) 进行搜索和替换,同时向控制台发送消息【英文标题】:Using fileinput (Python) for a search-and-replace while also sending messages to console 【发布时间】:2015-12-16 14:29:56 【问题描述】:我有台词
for line in fileinput.input(file_full_path, inplace=True):
newline, count = re.subn(search_str, replace_str, line.rstrip())
# ... display some messages to console ...
print newline # this is sent to the file_full_path
应该替换文件file_full_path
中所有出现的search_str
并用replace_str
替换它们。 fileinput
将 stdout
映射到给定文件。因此,print newline
和发送到 sys.stdout
的内容将发送到文件而不是控制台。
我想在过程中向控制台显示一些消息,例如我可以显示将要发生替换的行的部分或其他一些消息,然后继续将print newline
放入文件中。如何做到这一点?
【问题讨论】:
【参考方案1】:来自 Python 文档:
可选的就地过滤:如果关键字参数 inplace=1 是 传递给 fileinput.input() 或 FileInput 构造函数,文件 移动到备份文件,标准输出被定向到输入 文件(如果已存在与备份文件同名的文件,则 将被静默替换)。
所以您应该写入 stderr 以在控制台中显示消息,如下所示:
import sys
for line in fileinput.input(file_full_path, inplace=True):
newline, count = re.subn(search_str, replace_str, line.rstrip())
sys.stderr.write("your message here")
print newline
【讨论】:
有道理。忘了我可以使用stderr
与用户交流。谢谢。
使用write
方法,您可能需要"your message here\n"
。或者,您可以使用print >> sys.stderr, "your message here"
。以上是关于使用 fileinput (Python) 进行搜索和替换,同时向控制台发送消息的主要内容,如果未能解决你的问题,请参考以下文章