我有一個 .wbjn 檔案(ANSYS 作業臺日志檔案),它是一個 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()
該檔案還有其他幾行不需要修改。這里有什么問題,我該如何解決。
謝謝
uj5u.com熱心網友回復:
您可以使用fileinput可以編輯檔案的包in-place。請找到您可以試驗的草稿:
示例檔案.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 檔案
uj5u.com熱心網友回復:
此代碼可能會對您有所幫助。
map_dict = {'variable_1':'20','variable_2':'15'}
with open("filename.wbjn","r ") as handle:
handle_data = handle.readlines()
for a in range(len(handle_data)):
for k,v in map_dict.items():
handle_data[a] = handle_data[a].replace(k,str(v))
handle.seek(0)
handle.write('')
handle.writelines(handle_data)
uj5u.com熱心網友回復:
看起來,已經在讀取第一行之后,它跳到了要寫入的檔案末尾,之后就沒有其他行了。我的不是最優雅的解決方案,但它有效:
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()
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/458894.html
