5 回答

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊
現(xiàn)在,如果您想(硬編碼?).txt文件中的數(shù)據(jù)到.py文件,您應(yīng)該使用如下內(nèi)容:
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))
這將創(chuàng)建一個(gè)名為sets.py(您可以更改名稱)的新 python 文件并將所有值從文本文件存儲(chǔ)到 .py 文件?,F(xiàn)在,要使用這些值,請(qǐng)首先確保它們sets.py與主 python scipt 位于同一目錄中,然后from sets import *現(xiàn)在只需鍵入其名稱即可訪問(wèn)任何這些值,它將被識(shí)別。試試看

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超11個(gè)贊
我認(rèn)為這應(yīng)該可以用字典來(lái)實(shí)現(xiàn)。
像這樣的東西:
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
這會(huì)留下字典形式的輸出,其中鍵為:變量名稱,值為:變量本身。像這樣:
變量= {'Lx':'512','Ly':'512','nupower':'8','nu':'0'}
我不知道如何實(shí)現(xiàn)某種檢測(cè)它是 int 還是 float 的方法......

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超10個(gè)贊
改進(jìn)了答案之一的腳本,可以檢測(cè) 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貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超7個(gè)贊
對(duì)于未來(lái)的讀者,另一種解決方案是使用代碼exec()運(yùn)行適當(dāng)切碎的字符串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 的解決方案解析文件、創(chuàng)建字典、打印 .py 文件,然后讀取 .py 文件。

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超13個(gè)贊
我的建議是,你可能不應(yīng)該以這種方式存儲(chǔ)它。
如果甚至不考慮人類閱讀,請(qǐng)使用 pickle 來(lái)存儲(chǔ) python 對(duì)象。
如果它應(yīng)該是人類可讀/可編輯的,我會(huì)建議 csv 文件或類似的文件
添加回答
舉報(bào)