本文将介绍序列化与反序列化的有关知识,以及ini文件——初始化文件的处理。
一,简介
1,序列化
定义:将对象转为字节流
例如:机器学习模型转为字节流,保存到文件。
2,反序列化
定义:将字节流转为对象
例如:读取文件,将字节流转为机器学习模型。
3,ini文件
- ini文件简介
.ini 文件是Initialization File的缩写,即初始化文件,被用于配置文件,例如:mysql等的配置文件
- ini文件格式
ini文件由:节,键,值组成:
节
[section]
参数
(键=值)
name=value
以Mysql的配置文件为例:
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
- 主要操作
借助configparser对ini文件进行读取,写入操作等。
二,Json
1,Json简介
json:一种轻量级的数据交换格式,文本序列化,具有一定的可读性;
主要作用:网络数据传输,数据存储,交换等
主要的运用场景:
- 前端与后台请求数据格式
- mysql中数据存储
- 分布式爬虫中,将数据保存到redis等;
2,主要方法
方法 | 说明 |
json.dumps(obj,…) | 将对象转Json字符串,前提:obj对象支持该序列化方式 |
json.loads(s,…) | 将Json字符串转Python对象 |
json.dump(obj, fp,...) | 将对象以json格式写入文件 ,前提:obj对象支持该序列化方式 |
json.load(fp,…) | 将json文件数据转成Python对象 |
3,使用示例
- 使用json进行序列化和反序列化
import json
info = {"小明":"湖南", "小红":"江西", "小凯":"上海","小丽":"新疆"}
#将python对象对转成json数据
json_data = json.dumps(info)
print(json_data)
#将Json数据转成python对象
data = json.loads(json_data)
print(data)
'''
Output:
{"\u5c0f\u660e": "\u6e56\u5357", "\u5c0f\u7ea2": "\u6c5f\u897f", "\u5c0f\u51ef": "\u4e0a\u6d77", "\u5c0f\u4e3d": "\u65b0\u7586"}
{'小明': '湖南', '小红': '江西', '小凯': '上海', '小丽': '新疆'}
'''
三,Pickle
pickle是Python中特有的,用于二进制序列化与反序列模块,序列化后不具有可读性。
1,主要方法
方法 | 说明 |
pickle.dumps(obj,...) | 将python对象序列化为字节流 |
pickle.loads(data,...) | 将字节流反序列化为Python对象 |
pickle.dump(obj, file, ...) | 将对象存以字节流方式保存到文件,file为文件对象,以“wb”方式打开 |
pickle.load(file,...) | 将文件字节流反序列化为Python对象,file为文件对象,以"rb"方式打开 |
2,使用示例
- 序列化与反序列化
import pickle
info = {"小明":"湖南", "小红":"江西", "小凯":"上海","小丽":"新疆"}
pickle_data = pickle.dumps(info)
print(pickle_data)
data = pickle.loads(pickle_data)
print(data)
'''
Output:
b'\x80\x04\x95M\x00\x00\x00\x00\x00\x00\x00}\x94(\x8c\x06\xe5\xb0\x8f\xe6\x98\x8e\x94\x8c\x06\xe6\xb9\x96\xe5\x8d\x97\x94\x8c\x06\xe5\xb0\x8f\xe7\xba\xa2\x94\x8c\x06\xe6\xb1\x9f\xe8\xa5\xbf\x94\x8c\x06\xe5\xb0\x8f\xe5\x87\xaf\x94\x8c\x06\xe4\xb8\x8a\xe6\xb5\xb7\x94\x8c\x06\xe5\xb0\x8f\xe4\xb8\xbd\x94\x8c\x06\xe6\x96\xb0\xe7\x96\x86\x94u.'
{'小明': '湖南', '小红': '江西', '小凯': '上海', '小丽': '新疆'}
'''
四,Configparser
1,导入模块
from configparser import Configparser
2,ini文件读取
- 相关方法
方法 | 说明 |
config = ConfigParser() | 创建ConfigParser对象 |
config.read(fpath, encoding='utf-8') | 导入文件 |
config.sections()/items() | 获取所有的section名称/名称与section |
config.values() | 返回每个section |
config.keys()/config.values() | 获取所有的sections的key/section |
config.has_section(section) | 是否包含section |
config.has_option(section, option) | section下是否包含option |
config.get(section, option, *, raw=False…) | 获取section下key对应value |
3,ini文件写入
- 相关方法
方法 | 说明 |
config.add_section(section) | 添加session |
config.set(section, option, value=None) | 添加key-value |
config.write(fp, space_around_delimiters=True) | 写入文件 |