【问题标题】:How to dump all the variables in a file?如何转储文件中的所有变量?
【发布时间】:2016-02-15 15:20:01
【问题描述】:

是否有一种简单且或多或少标准的方法将所有变量转储到文件中,例如堆栈跟踪,但带有变量名称和值?在 locals()、globals() 和 dir() 中的那些。 我找不到简单的方法,这是我的“locals()”代码,它不起作用,因为键可以是不同的类型:

vars1 = list(filter(lambda x: len(x) > 2 and locals()[x][:2] != "__", locals()))

如果没有过滤,当我尝试转储变量时出现错误:

f.write(json.dumps(locals()))
# =>
TypeError: <filter object at 0x7f9bfd02b710> is not JSON serializable

我认为一定有比手动操作更好的方法。

【问题讨论】:

  • 您必须为所有类编写自定义序列化器参见:stackoverflow.com/questions/3768895/…
  • @MaximPanfilov, ты че, гонишь что-ли?一个переменные?
  • json сериализует только базовые типы данных, так что придется для каждого небазового тизта написать свой сериали Можно еще использовать pickle и сериализовать такие данные в текст + base64, например, но такие данные можно будет десеризовать
  • be nice。在 stackoverflow.com 上使用英语。如果您需要俄语,请访问ru.stackoverflow.com
  • 不清楚locals() 和“文件中的变量”是如何连接的。要获取所有对象的列表,您可以使用gc.get_objects()。您可能想问:“如何将任意 Python 对象序列化为 JSON?”

标签: python json python-3.x


【解决方案1】:

首先,在您的非工作示例中,您没有完全过滤键(即使技术上不需要,通常也应该只是字符串); locals()[x] 是值。

但即使您确实以某种方式过滤了键,您通常也不知道所有剩余的值都是 JSON 可序列化的。因此,您要么需要过滤值以仅保留可以映射到 JSON 的类型,要么需要一个 default 序列化器实现,将一些合理的序列化应用于任何值。最简单的事情是只使用内置的字符串表示作为后备:

json.dumps(locals(), default=repr)

顺便说一句,还有一种更直接有效的方式将 JSON 转储到文件中(注意 dumpdumps 之间的区别):

json.dump(locals(), f, default=repr)

【讨论】:

    猜你喜欢
    • 2014-09-07
    • 2012-04-05
    • 1970-01-01
    • 2012-01-12
    • 2019-11-18
    • 1970-01-01
    • 2022-10-06
    • 2019-09-02
    • 2020-08-20
    相关资源
    最近更新 更多