提问人:NeStack 提问时间:8/18/2023 更新时间:8/18/2023 访问量:34
在python中,搜索和替换(使用fileinput)会删除我的所有文件内容
In python search-and-replace (with fileinput) erases all my file content
问:
我有一个包含参数的.py文件,看起来像这样:my_file.py
input_folder = 'bla/bla/'
output_folder = 'out/put/folder/'
iterations = 20
我正在编写一个读取此 .py 文件的脚本,当它遇到用户定义的行时,它会更改此行中的参数。所以到目前为止,我设法创建了这个脚本
import fileinput
for line in fileinput.input("my_file.py", inplace=True):
if line.startswith('output_folder ='):
print("output_folder = '/new/file/path/'", end='') # for Python 3
我希望这个脚本产生的是:
input_folder = 'bla/bla/'
output_folder = '/new/file/path/'
iterations = 20
相反,它删除了我没有提到的所有行,只给我留下了以下内容:my_file.py
output_folder = '/new/file/path/'
如何达到预期的效果?TNX系列
答:
1赞
Suraj Shourie
8/18/2023
#1
您需要在代码中添加一个语句,因为该参数将覆盖所有行。
像这样的东西(你可以改变参数):else
inplace
end
for line in fileinput.input(file_path, inplace=True):
if line.startswith('output_folder ='):
print("output_folder = '/new/file/path/'", end='\n') # for Python 3
else:
print(line, end="")
评论
0赞
NeStack
8/18/2023
谢谢,是的,很明显我需要这个声明,我应该知道得更好else
1赞
JonSG
8/18/2023
#2
每:https://docs.python.org/3/library/fileinput.html
可选的就地筛选:如果关键字参数 inplace=True 是 传递给 fileinput.input() 或传递给 FileInput 构造函数,即文件 移动到备份文件,标准输出定向到输入 文件(如果已存在与备份文件同名的文件,则 将被静默替换)。这样就可以编写过滤器 就地重写其输入文件。
您观察到的似乎是预期的行为。你只需要在 an 中呼应未更改的行print(line)
else:
else:
print(line, end="")
评论