ini文件处理
configparser模块的ConfigParser类就是用来操作。 可以将section当做key,section存储着键值对组成的字典,可以把ini配置文件当做一个嵌套的字典。 默认使用的是有序字典。
序列化和反序列化
为什么序列化?
内存中的字典、列表、集合以及各种对象,如何保存到一个文件中? 如果是自己定义的类的实例,如何保存到一个文件中? 如何从文件中读取数据,并让它们在内存中再次恢复成自己对应的类的实例? 要设计一套协议,按照某种规则,把内存中数据保存到文件中。文件是一个字节序列,所以必须把数据 转换成字节序列,输出到文件。这就是序列化。 反之,从文件的字节序列恢复到内存并且还是原来的类型,就是反序列化。
定义
serialization 序列化 将内存中对象存储下来,把它变成一个个字节。-> 二进制 deserialization 反序列化 将文件的一个个字节恢复成内存中对象。<- 二进制 序列化保存到文件就是持久化。 可以将数据序列化后持久化,或者网络传输;也可以将从文件中或者网络接收到的字节序列反序列化。 Python 提供了pickle 库。
模块-pickle
import pickle
filename = '/opt/test'
i = 99
c = 'c'
l = list('123')
d = {'a':127, 'b':'abc', 'c':[1,2,3]}
with open(filename, 'wb') as f:
pickle.dump(i, f)
pickle.dump(c, f)
pickle.dump(l, f)
pickle.dump(d, f)
with open(filename, 'rb') as f:
print(f.read(), f.seek(0))
for i in range(4):
x = pickle.load(f)
print(x, type(x))
序列化应用
一般来说,本地序列化的情况,应用较少。大多数场景都应用在网络传输中。 将数据序列化后通过网络传输到远程节点,远程服务器上的服务将接收到的数据反序列化后,就可以使用了。 但是,要注意一点,远程接收端,反序列化时必须有对应的数据类型,否则就会报错。尤其是自定义类,必须远程得有一致的定义。 现在,大多数项目,都不是单机的,也不是单服务的,需要多个程序之间配合。需要通过网络将数据传送到其他节点上去,这就需要大量的序列化、反序列化过程。 但是,问题是,Python程序之间可以都用pickle解决序列化、反序列化,如果是跨平台、跨语言、跨协议pickle就不太适合了,就需要公共的协议。例如XML、Json、Protocol Buffer、msgpack等。 不同的协议,效率不同、学习曲线不同,适用不同场景,要根据不同的情况分析选型。
json模块
Python 与 Json Python支持少量内建数据类型到Json类型的转换。
import json
d = {'name':'Tom', 'age':20, 'interest':('music', 'movie'), 'class':['python']}
j = json.dumps(d)
print(j, type(j))
d1 = json.loads(j)
print(d1)
print(id(d), id(d1))
一般json编码的数据很少落地,数据都是通过网络传输。传输的时候,要考虑压缩它。 本质上来说它就是个文本,就是个字符串。 json很简单,几乎编程语言都支持Json,所以应用范围十分广泛。
|