python json & pickle 模块
用于序列化的两个模块
- json,用于字符串 和 python数据类型间进行转换
- pickle,用于python特有的类型 和 python的数据类型间进行转换
Json模块提供了四个功能:dumps、dump、loads、load
pickle模块提供了四个功能:dumps、dump、loads、load
一、python 3 JSON模块使用(用于字符串和python数据类型间进行转换)
import json
data = {
"北京市": {
"朝阳区": ["三里屯", "望京", "国贸"],
"海淀区": ["五道口", "学院路", "后厂村"],
"东城区": ["东直门", "崇文门", "王府井"],
},
"上海市": {
"静安区": [],
"黄浦区": [],
"虹口区": [],
}
}
1、json.dumps dict-->strting
#json.dumps 将数据通过特殊的形式转换为所有程序语言都认识的字符串
s_dumps = json.dumps(data, sort_keys=True, indent=4, ensure_ascii=False)
print(type(s_dumps))
print(s_dumps)
output:
<class 'str'>
{
"上海市": {
"虹口区": [],
"静安区": [],
"黄浦区": []
},
"北京市": {
"东城区": [
"东直门",
"崇文门",
"王府井"
],
"朝阳区": [
"三里屯",
"望京",
"国贸"
],
"海淀区": [
"五道口",
"学院路",
"后厂村"
]
}
}
2、json.loads string-->dict
r_loads = json.loads(s_dumps)
print(type(r_loads))
print(r_loads)
output:
<class 'dict'>
{'上海市': {'虹口区': [], '静安区': [], '黄浦区': []}, '北京市': {'东城区': ['东直门', '崇文门', '王府井'], '朝阳区': ['三里屯', '望京', '国贸'], '海淀区': ['五道口', '学院路', '后厂村']}}
3、json.dump 写入文件
#json.dump 将数据通过特殊的形式转换为所有程序语言都认识的字符串,并写入文件
with open("data.json", "w", encoding="UTF-8") as f_dump: s_dump = json.dump(data, f_dump, indent=4, ensure_ascii=False)
print(type(s_dump))
print(s_dump)
output:
<class 'NoneType'>
None
4、json.load 从文件读取
with open("data.json", "r", encoding="utf-8") as f_load:
r_load = json.load(f_load)
print(type(r_load))
print(r_load)
output:
<class 'dict'>
{'北京市': {'朝阳区': ['三里屯', '望京', '国贸'], '海淀区': ['五道口', '学院路', '后厂村'], '东城区': ['东直门', '崇文门', '王府井']}, '上海市': {'静安区': [], '黄浦区': [], '虹口区': []}}
二、python 3 pickle 模块使用(用于python特有的类型 和 python的数据类型间进行转换)
import pickle
data = {'k1': 123, 'k2': 'Hello'}
1、pickle.dumps 将数据通过特殊的形式转换为只有python语言认识的字符串
p_str = pickle.dumps(data)
print(type(p_str))
print(p_str)
output:
<class 'bytes'>
b'\x80\x03}q\x00(X\x02\x00\x00\x00k1q\x01K{X\x02\x00\x00\x00k2q\x02X\x05\x00\x00\x00Helloq\x03u.'
2、pickle.loads
p_dict = pickle.loads(p_str)
print(type(p_dict))
print(p_dict)
output:
<class 'dict'>
{'k1': 123, 'k2': 'Hello'}
3、pickle.dump 将数据通过特殊的形式转换为只有python语言认识的字符串,并写入文件
print(type(data))
with open('data2.json', 'wb') as fp:
pickle.dump(data, fp)
output:
<class 'dict'>
4、pickle.load
with open('data2.json', 'rb') as fo:
p_load = pickle.load(fo)
print(type(p_load))
print(p_load)
output:
<class 'dict'>
{'k1': 123, 'k2': 'Hello'}