代码之家  ›  专栏  ›  技术社区  ›  Blorgbeard

在python中将数据结构持久化到文件的最简单方法是什么?

  •  27
  • Blorgbeard  · 技术社区  · 17 年前

    假设我有这样的东西:

    d = { "abc" : [1, 2, 3], "qwerty" : [4,5,6] }
    

    最简单的方法是什么 熟练地 把它放到一个文件中,我以后可以从python加载它吗?

    我能以某种方式将其保存为python源代码吗(从python脚本中,而不是手动保存!)然后 import 晚些时候?

    还是应该使用JSON之类的?

    7 回复  |  直到 8 年前
        1
  •  55
  •   eric.christensen    17 年前

    使用 pickle 模块。

    import pickle
    d = { "abc" : [1, 2, 3], "qwerty" : [4,5,6] }
    afile = open(r'C:\d.pkl', 'wb')
    pickle.dump(d, afile)
    afile.close()
    
    #reload object from file
    file2 = open(r'C:\d.pkl', 'rb')
    new_d = pickle.load(file2)
    file2.close()
    
    #print dictionary object loaded from file
    print new_d
    
        2
  •  12
  •   Miles    17 年前

    选你自己: Python Standard Library - Data Persistance . 哪一个最合适,可以根据您的具体需求而有所不同。

    pickle 可能是最简单和最有能力的,只要“将一个任意对象写入一个文件并恢复它”,它就可以自动处理自定义类和循环引用。

    为了获得最佳的酸洗性能(速度和空间),请使用 cPickle HIGHEST_PROTOCOL .

        3
  •  7
  •   mhawke    8 年前

    尝试将提供持久字典的搁置模块,例如:

    import shelve
    d = { "abc" : [1, 2, 3], "qwerty" : [4,5,6] }
    
    shelf = shelve.open('shelf_file')
    for key in d:
        shelf[key] = d[key]
    
    shelf.close()
    
    ....
    
    # reopen the shelf
    shelf = shelve.open('shelf_file')
    print(shelf) # => {'qwerty': [4, 5, 6], 'abc': [1, 2, 3]}
    
        4
  •  4
  •   Roger Pate    17 年前

    JSON 有缺点,但当它满足您的需要时,它还包括:

    • 简单易用
    • 作为 json module
    • 界面有点类似于 pickle 可以处理更复杂的情况
    • 用于调试、共享和版本控制的人类可编辑文本
    • 有效的python代码
    • 在网络上建立良好(如果您的程序涉及到任何该域)
        5
  •  4
  •   Jay Atkinson    11 年前

    你也可能想看看 Zope's Object Database 你得到的越复杂:可能是你拥有的东西被过度杀戮了,但是它的规模很好,不太难使用。

        6
  •  3
  •   John Kugelman Michael Hodel    17 年前

    如果您想将其保存为易于阅读的类似JSON的格式,请使用 repr 将对象序列化并 eval 反序列化它。

    repr(object) -> string

    返回对象的规范字符串表示形式。 对于大多数对象类型, eval(repr(object)) == object .

        7
  •  2
  •   Eli Bendersky    17 年前

    只需添加到前面的建议中,如果希望文件格式易于阅读和修改,也可以使用 YAML . 它对嵌套的dict和list非常有效,但也适用于更复杂的数据结构(即涉及自定义对象的数据结构),而且它的最大优点是格式可读。

    推荐文章