【问题标题】:How do I encode/decode a dictionary in Python 3 to/from an external file?如何将 Python 3 中的字典编码/解码到外部文件?
【发布时间】:2013-05-25 03:40:52
【问题描述】:

我对编码和解码比较陌生,事实上我根本没有任何经验。

我想知道,如何将 Python 3 中的字典解码为不可读的格式,以防止有人在程序之外对其进行修改?
同样,我将如何从该文件中读取并将字典编码回来?

我的测试代码现在只写入和读取纯文本文件。

import ast

myDict = {}

#Writer
fileModifier = open('file.txt', 'w')
fileModifier.write(str(myDict)))
fileModifier.close()

#Reader
fileModifier = open('file.txt', 'r')
myDict = ast.literal_eval(fileModifier.read())
fileModifier.close()

【问题讨论】:

    标签: python file dictionary python-3.x encode


    【解决方案1】:

    这里使用的典型东西是jsonpickle 模块(都在标准库中)。该过程称为“序列化”。 pickle 可以序列化几乎 任意python 对象,而json 只能序列化基本类型/对象(整数、浮点数、字符串、列表、字典)。 json 在一天结束时是人类可读的,而 pickle 文件不是。

    【讨论】:

      【解决方案2】:

      根据您的字典包含的内容,您可以使用jsonpickle 之类的编码库(用于存储我的复杂python 数据结构)。

      这是一个使用 json 的示例,要使用 pickle,只需将所有 json 实例替换为 pickle 即可。

      import json
      
      myDict = {}
      
      #Writer
      fileModifier = open('file.txt', 'w'):
      json.dump(myDict, fileModifier)
      fileModifier.close()
      
      #Reader
      fileModifier = open('file.txt', 'r'):
      myDict = json.load(fileModifier)
      fileModifier.close()
      

      【讨论】:

      • 这与我的代码完全相同。我需要它将字典解码为不可读的格式,以防止有人在程序之外对其进行修改。我会更新我的 OP 以更清楚地说明这一点。
      【解决方案3】:

      编码/解码的替代方法是简单地将文件用作dict,而python 有shelve 模块可以做到这一点。该模块使用文件作为数据库,并为其提供类似dict 的接口。

      它有一些限制,例如键必须是字符串,而且它显然比普通的 dict 慢,因为它执行 I/O 操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-25
        • 2013-04-14
        • 1970-01-01
        相关资源
        最近更新 更多