5 回答

TA貢獻2051條經驗 獲得超10個贊
現在,如果您想(硬編碼?).txt文件中的數據到.py文件,您應該使用如下內容:
temp_list = []
with open("params.txt") as file:
while True:
line = file.readline()
line = line.strip()
value = line.split(' ')
for i, word in enumerate(value):
if word == '=':
var = f'{value[i-1]} = {value[i+1]}'
temp_list.append(var)
if not line:
break
with open('sets.py', 'w') as f:
f.write('\n'.join(temp_list))
這將創建一個名為sets.py(您可以更改名稱)的新 python 文件并將所有值從文本文件存儲到 .py 文件?,F在,要使用這些值,請首先確保它們sets.py與主 python scipt 位于同一目錄中,然后from sets import *現在只需鍵入其名稱即可訪問任何這些值,它將被識別。試試看

TA貢獻1856條經驗 獲得超11個贊
我認為這應該可以用字典來實現。
像這樣的東西:
def getVariables():
with open("filename.txt",'r') as file:
variables = {}
while True:
line = file.readline()
line = line.strip()
value = line.split(' ')
for i, word in enumerate(value):
if word == '=':
variables[str(value[i-1])] = value[i+1]
if not line:
break
return variables
這會留下字典形式的輸出,其中鍵為:變量名稱,值為:變量本身。像這樣:
變量= {'Lx':'512','Ly':'512','nupower':'8','nu':'0'}
我不知道如何實現某種檢測它是 int 還是 float 的方法......

TA貢獻1802條經驗 獲得超10個贊
改進了答案之一的腳本,可以檢測 int、float 和 str
def getVariables():
with open("params.txt") as file:
variables = {}
while True:
line = file.readline()
line = line.strip()
value = line.split(' ')
for i, word in enumerate(value):
if word == '=':
try:
variables[str(value[i-1])] = int(value[i+1])
except ValueError:
try:
variables[str(value[i-1])] = float(value[i+1])
except ValueError:
variables[str(value[i-1])] = (value[i+1])
if not line:
break
return variables

TA貢獻1862條經驗 獲得超7個贊
對于未來的讀者,另一種解決方案是使用代碼exec()運行適當切碎的字符串params.txt,以給定的值分配變量:
with open('params.txt', 'r') as infile:
for line in infile:
? ? splitline = line.strip().split(' ')
? ? for i, word in enumerate(splitline):
? ? ? ? if word == '=':
? ? ? ? ? ? # DANGER! Don't use this unless you completely trust the content of params.txt!
? ? ? ? ? ? exec(splitline[i-1] + splitline[i] + splitline[i+1])
這避免了按照 Matiiss 的解決方案解析文件、創建字典、打印 .py 文件,然后讀取 .py 文件。

TA貢獻1828條經驗 獲得超13個贊
我的建議是,你可能不應該以這種方式存儲它。
如果甚至不考慮人類閱讀,請使用 pickle 來存儲 python 對象。
如果它應該是人類可讀/可編輯的,我會建議 csv 文件或類似的文件
添加回答
舉報