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 文件。现在,要使用这些值,请首先确保它们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 文件或类似的文件
添加回答
举报