在python中,搜索和替换(使用fileinput)会删除我的所有文件内容

In python search-and-replace (with fileinput) erases all my file content

提问人:NeStack 提问时间:8/18/2023 更新时间:8/18/2023 访问量:34

问:

我有一个包含参数的.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系列

python 文件-io

评论


答:

1赞 Suraj Shourie 8/18/2023 #1

您需要在代码中添加一个语句,因为该参数将覆盖所有行。 像这样的东西(你可以改变参数):else inplaceend

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="")