Python 数据持久化 - 对象序列化
Python 内置的 open() 函数返回的内置文件对象有一个重要的缺点。 当以 'w' 模式打开时,write() 方法只接受字符串对象。
这意味着,如果您的数据以任何非字符串形式表示,无论是内置类(数字、字典、列表或元组)的对象还是其他用户定义的类,都不能直接将其写入文件。在写入之前,您需要将其转换为字符串表示。
numbers=[10,20,30,40] file=open('numbers.txt','w') file.write(str(numbers)) file.close()
对于二进制文件,write() 方法的参数必须是字节对象。 例如,整数列表通过 bytearray() 函数转换为字节,然后写入文件。
numbers=[10,20,30,40] data=bytearray(numbers) file.write(data) file.close()
要从相应数据类型的文件中读回数据,需要进行反向转换。
file=open('numbers.txt','rb') data=file.read() print (list(data))
这种从对象到字符串或字节格式(反之亦然)的手动转换非常繁琐乏味。 可以将 Python 对象的状态以字节流的形式直接存储到文件或内存流中,然后检索到其原始状态。 此过程称为序列化和反序列化。
Python 的内置库包含用于序列化和反序列化过程的各种模块。
序号 | 名称 & 描述 |
---|---|
1 |
pickle Python 特定的序列化库 |
2 |
marshal 内部序列化使用的库 |
3 |
shelve Python 对象持久化 |
4 |
dbm 提供 Unix 数据库接口的库 |
5 |
csv 用于将 Python 数据存储和检索为 CSV 格式的库 |
6 |
json 用于序列化为通用 JSON 格式的库 |