gpt4 book ai didi

Python 使用 stdout 和 fileinput 写入文件

转载 作者:太空狗 更新时间:2023-10-30 00:11:47 24 4
gpt4 key购买 nike

我有以下代码,它通过进行正则表达式替换来修改文件 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 我有效地将 stdout 重定向到打开的文件。因此无法向未发送到文件的命令行显示输出(例如,询问是否进行替换)。

有什么想法吗?

最佳答案

文件输入模块实际上是用来处理多个输入文件的。您可以改用常规的 open() 函数。

这样的事情应该可行。

通过读取文件然后使用 seek() 重置指针,我们可以覆盖文件而不是追加到末尾,因此就地编辑文件

import re

regex = re.compile(r'^([^&]*)(&)([^&]*)(&)([^&]*)')

with open('test.tex', 'r+') as f:
old = f.readlines() # Pull the file contents to a list
f.seek(0) # Jump to start, so we overwrite instead of appending
for line in old:
s = raw_input(line)
if s == 'y':
f.write(regex.sub(r'\3\2\1\4\5',line))
else:
f.write(line)

http://docs.python.org/tutorial/inputoutput.html

关于Python 使用 stdout 和 fileinput 写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10818812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com