使用fileinput(Python)进行搜索和替换,同时还向控制台发送消息

时间:2015-09-19 13:49:07

标签: python stdout

我有行

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

应该替换文件search_str中出现的所有file_full_path,并将其替换为replace_strfileinputstdout映射到给定文件。因此,print newline和发送到sys.stdout的内容会被发送到文件而不是控制台。

我想在此过程中,向控制台显示一些消息,例如我可以显示替换将要发生的行的部分,或者其他一些消息,然后继续将print newline放入文件中。怎么做?

1 个答案:

答案 0 :(得分:5)

来自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