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

Pythonic 对象持久化

4

dbm

提供 Unix 数据库接口的库

5

csv

用于将 Python 数据存储和检索到 CSV 格式的库

6

json

用于序列化到通用 JSON 格式的库

广告