替换一行中文本的特定部分 - python

Replace a certain part of a text in a line - python

我有一个 .wbjn 文件(ANSYS workbench 日志文件),这是一个 python 文件,我必须在其中替换某些变量。例如

parameter_1 = variable_1
parameter_2 = variable_2
.
.
parameter_n = variable_n

我必须用值列表替换 variables_1..n。

所以我创建了一个映射字典并对其进行迭代以替换值。但是这些值并没有被我写的代码所取代;

map_dict = {'variable_1':'20','variable_2':'15'}
handle = open("filename.wbjn","r+")
for l in handle:
    for k,v in map_dict.items():
        l = l.replace(k,str(v))
    handle.write(l)
handle.close()

该文件还有其他几行不需要修改。这里有什么问题,我该如何解决。

谢谢

您可以使用 fileinput 包来编辑文件 in-place。请找到您可以试验的草稿:

示例file.txt:

parameter_1 = variable_1
parameter_n = variable_n
parameter_4 = variable_4
parameter_k = variable_k

脚本

from fileinput import FileInput

map_dict = {'variable_1': '20', 'variable_4': '15'}

with FileInput('file.txt', inplace=True) as file:
    for line in file:
        line = line.strip()
        parts = line.split('=')
        parameter = parts[0].strip()
        variable = parts[1].strip()
        if variable in map_dict:
            print(f"{parameter} = {map_dict[variable]}")
        else:
            print(line)

file.txt执行后

parameter_1 = 20
parameter_k = variable_n
parameter_4 = 15
parameter_k = variable_k

请注意,print 函数不会显示在脚本输出中,而是将行写入文件。

详情请见fileinput documentation

看起来,已经读完第一行,它跳到文件的末尾写入,之后就没有其他行了。我的不是最优雅的解决方案,但它有效:

map_dict = {"variable_1": "20", "variable_2": "15"}
handle = open("filename.wbjn", "r+")
processed = []
for l in handle:
    for k, v in map_dict.items():
        l = l.replace(k, str(v))
    processed.append(l)
handle.seek(0)
handle.write("".join(processed))
handle.truncate()
handle.close()