【问题标题】:Write multiple variables of different types to text file将多个不同类型的变量写入文本文件
【发布时间】:2017-03-07 23:49:56
【问题描述】:

我有一个 Python 代码,它生成多个具有不同类型和长度的变量。我想把所有东西都写成一个txt。

我要保存的所有变量都在名为 dicvariabledic 变量中。 更准确地说,我要保存的变量是:

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:中逐个提取变量

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)

现在我想打开一个 txt 文件,并将所有这些变量保存在那里,最好是以后可以在其他程序(如 matlab)中轻松加载 txt。 原始 dic 变量也有nobs 条目(即dicvariable[0], dicvariable[1], (...), divariable(nobs)),所以我想重复这个过程并保存nobs txt 文件。

编辑:

这是我尝试过的错误:

f = open('file.txt', 'w')
f.write(VarA + '\n' )
f.write(VarB + '\n' )
f.write(VarC + '\n' )
f.write(VarD + '\n' )
f.write(VarE + '\n' )
f.write(VarF1 + '\n' )
f.write(VarF2 + '\n' )
f.write(VarF3 + '\n' )
f.write(VarF4 + '\n' )
f.write(VarF5 + '\n' )
f.close()

【问题讨论】:

  • 具体的问题是什么?
  • 好吧,我已经添加了我尝试过但不起作用的内容。我实际上搜索了一下如何做到这一点,但仍然无法弄清楚。
  • 请同时显示错误。我认为您只是错过了先将变量转换为字符串:f.write(str(VarA) + '\n' )
  • 好的!谢谢。似乎现在可以工作了!

标签: python text save output


【解决方案1】:

问题在于这些变量不是文本数据。您需要先将它们转换为文本,然后才能将它们写入文本文件。执行此操作的正常方法是使用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))

【讨论】:

    【解决方案2】:

    试用搁置模块:https://docs.python.org/2/library/shelve.html

    这会将所有变量保存到二进制文件 IIRC 中的字典中。这对于保存程序的设置很有用。

    这是一个简单的介绍:https://automatetheboringstuff.com/chapter8/ 转到部分:使用搁置模块保存变量

    【讨论】:

    • 搁置文件无法导入其他编程语言。
    猜你喜欢
    • 2011-07-06
    • 2018-01-01
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多