我有一个Python代码,可以生成多个具有不同类型和长度的变量。我想把所有东西都写成txt。
我要保存的所有变量都在名为dic
的{{1}}变量中。
更确切地说,我想要保存的变量是:
dicvariable
我要做的第一件事就是从dicvariable[0]['VarA'] # variable type int
dicvariable[0]['VarB'] # variable type str
dicvariable[0]['VarC'] # variable type bool
dicvariable[0]['VarD'] # variable type NoneType
dicvariable[0]['VarE'] # variable type list (size can be anything)
dicvariable[0]['VarF'] # variable type dict (itself contains 5 more variables type ndarray)
dicvariable:
现在我想打开一个txt文件,并保存所有这些变量,最好是以后我可以轻松地在其他程序(如matlab)中加载txt。
原始的dic变量也有VarA = dicvariable[0]['VarA'] # variable type int
VarB = dicvariable[0]['VarB'] # variable type str
VarC = dicvariable[0]['VarC'] # variable type bool
VarD = dicvariable[0]['VarD'] # variable type NoneType
VarE = dicvariable[0]['VarE'] # variable type list
VarF1 = dicvariable[0]['VarF']['VarF1'] # variable type nparray (any size)
VarF2 = dicvariable[0]['VarF']['VarF2'] # variable type nparray (any size)
VarF3 = dicvariable[0]['VarF']['VarF3'] # variable type nparray (any size)
VarF4 = dicvariable[0]['VarF']['VarF4'] # variable type nparray (any size)
VarF5 = dicvariable[0]['VarF']['VarF5'] # variable type nparray (any size)
条目(即nobs
),所以我想重复这个过程并保存dicvariable[0], dicvariable[1], (...), divariable(nobs)
txt文件。
编辑:
这是我尝试的产生错误的内容:
nobs
答案 0 :(得分:0)
问题是这些变量不是文本数据。您需要先将它们转换为文本,然后才能将它们写入文本文件。正常的方法是使用str(myvar)
。所以你可以做f.write(str(VarF1) + '\n' )
。你可以像这样循环:
with open('file.txt', 'w') as f:
for subdict in dictvariable:
for value in subdict.values():
if not hasattr(value, 'values'):
f.write(str(value)+'\n')
continue
for subvalue in value.values():
f.write(str(subvalue)+'\n')
这可以使用生成器简化:
def getvars(data):
for subdata in data:
for value in subdata.values():
if not hasattr(value, 'values'):
yield value
continue
for subvalue in value.values():
yield subvalue
with open('file.txt', 'w') as f:
f.writelines(str(value)+'\n' for value in getvars(dictvariable))
答案 1 :(得分:-1)
尝试搁置模块:https://docs.python.org/2/library/shelve.html
这会将所有变量保存到二进制文件IIRC中的字典中。它对保存程序的设置很有用。
这是一个简单的介绍:https://automatetheboringstuff.com/chapter8/转到以下部分:使用搁置模块保存变量