将不同类型的多个变量写入文本文件

时间:2017-03-07 23:49:56

标签: python text save output

我有一个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

2 个答案:

答案 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/转到以下部分:使用搁置模块保存变量