使用 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 替换它们。 fileinputstdout 映射到给定文件。因此,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) 进行搜索和替换,同时向控制台发送消息的主要内容,如果未能解决你的问题,请参考以下文章

Python常用标准库之fileinput

Python常用标准库之fileinput

python文件处理之fileinput

Python中fileinput模块介绍

python模块fileinput

Python fileinput模块详解