序列化模块
序列化模块
- 序列化:将Python或其他语言的数据类型转换成字符串类型
list1 = [1,2,3]----->"[1,2,3]"
- Python中的数据类型有:
- int、float、str、list、dict、tuple、bool、set
- 序列:指的是字符串
- 序列化
- 其他数据类型——>字符串——>文件中
- 反序列化
- 文件中——>字符串——>其他数据类型
一、json模块
json模块:是一个序列化模块,是一个“第三方”的特殊数据格式
-
可以将
Python数据类型——>json数据格式——>字符串——>文件中
-
其他语言想要使用Python中的数据:
文件中——>字符串——>json数据格式——>其他语言的数据类型
-
注意:在json中,所有的字符串都是双引号
元组比较特殊:
Python中的元组,若将其转换成json数据,内部会将元组——>列表
set(集合)是不能转换成json数据的
-
为什么要使用json
- 为了让不同的语言之间数据可以共享
PS:由于各种语言的数据类型不一,但长相可以一样,比如Python不能直接使用其他语言的数据类型,必须将其他语言的数据类型转换成json数据格式,Python获取到json数据后可以将json转换成Python的数据类型
-
如何使用
import json
json.dumps: json.dumps(),f = open()--->f.write() # 序列化:Python数据类型——>json——>字符串——>json文件中 json.loads: f = open(),str = f.read(), json.loads(str) # 反序列化:json文件中——>字符串——>json——>Python或其他语言数据类型 json.dump(): # 序列化:Python数据类型——>json——>字符串——>json文件中 #内部实现:f.write() json.load(): # 反序列化:json文件中——>字符串——>json——>Python或其他语言数据类型 # 内部实现:f.read()
dump、load:使用更方便
注意:保存json数据时,用 .json 作为文件的后缀名
import json list1 = ['123', '321'] # dumps 将python数据 ——>json数据格式——>字符串 json_str = json.dumps(list1) print(json_str) print(type(json_str)) ["123", "321"] # 双引号 <class 'str'> #str字符串 python_data = json.loads(json_str) print(python_data) print(type(python_data)) ['123', '321'] <class 'list'>
二、pickle模块
- pickle模块:是一个Python自带的序列化模块
- 优点:
- 可以支持Python中所有的数据类型
- 可以直接存“bytes类型”的数据,pickle存取速度更快
- 缺点:(致命的缺点)
- 只能支持Python使用,不可以跨平台
- 优点:
import pickle
import pickle
set1 = {'tank', 'sean', 'jason', '大脸'}
with open('teacher.pickle', 'wb')as f:
pickle.dump(set1, f)
with open('teacher.pickle', 'rb')as f:
python_set = pickle.load(f)
print(python_set)
print(type(python_set))
三、collections模块
- python默认八大数据:
- 整形(int)、浮点型(float)、字符串(str)、字典(dict)、元组(tuple)、列表(list)、集合(set)、布尔(bool)
- collections 模块
- 提供了一些Python八大数据类型“以外的数据类型”
- 具名元组
- 只是一个名字,应用在坐标的场景
- from collections import namedtuple
- 有序字典
- Python中字典默认是无序的
- collections中提供 了有序的字典
- from collections import OrderedDict
from collections import namedtuple
point = namedtuple('坐标', ['x', 'y'])
p = point(1, 3)
print(p)
print(type(p))
坐标(x=1, y=3)
<class '__main__.坐标'>
扑克牌
card = namedtuple('扑克牌', ['color', 'number'])
# 由扑克牌对象产生一张扑克牌
red_A = card('♥', 'A')
print(red_A)
black_K = card('♠', 'K')
print(black_K)
meihua_Q = card('♣', 'Q')
print(meihua_Q)
fangpian_J = card('♦', 'J')
print(fangpian_J)
扑克牌(color='♥', number='A')
扑克牌(color='♠', number='K')
扑克牌(color='♣', number='Q')
扑克牌(color='♦', number='J')
python 默认无序字典
# python默认无序字典
dic = dict({'x':1, 'y':2, 'z':3})
print(dic)
print(type(dic))
for line in dic:
print(line)
{'x': 1, 'y': 2, 'z': 3}
<class 'dict'>
x
y
z
有序字典
from collections import OrderedDict
order_dict = OrderedDict({'x':1, 'y':2, 'z':3})
print(order_dict)
print(type(order_dict))
print(order_dict.get('z'))
print(order_dict['z'])
for line in order_dict:
print(line)
OrderedDict([('x', 1), ('y', 2), ('z', 3)])
<class 'collections.OrderedDict'>
3
3
x
y
z
四、openpyxl模块
openpyxl模块:第三方模块
-
可以对Excel表格进行操作的模块
-
下载:
- pip3 install openpyxl
-
Excel版本
- 2003之前: Excel 名字:.xls
- 2003之后:Excel名字:.xlsx
-
配置永久第三方源:
D:\Python36\Lib\site-packages\pip_internal\models\index.py
写入数据
from openpyxl import Workbook
读取数据
from openpyxl import load_workbook
# 获取Excel文件对象
wb_obj = Workbook()
wb1 = wb_obj.create_sheet('python工作表1', 1)
wb2 = wb_obj.create_sheet('python工作表2', 2)
# 修改工作表名字:为python工作表1标题修改名字
print(wb1.title)
wb1.title = 'hello big baby'
print(wb1.title)
# 为第一张工作表添加值
wb1['工作簿中的表格位置']
wb1['A1'] = 1000
wb1['B1'] = 2000
wb1['C1'] = '=SUM(A1:B1)'
# 生成Excel表格
wb_obj.save('python.xlsx')
print('Excel表格生成成功')
# 读取数据
from openpyxl import load_workbook
wb_obj = load_workbook('python.xlsx')
print(wb_obj)
wb1 = wb_obj['hello big baby']
print(wb1['A1'].value)
wb1['A1'] = 100
print(wb1['A1'].value)
# 批量写入100条数据
wb_obj = Workbook()
wb1 = wb_obj.create_sheet('工作表1')
n = 1
for line in range(100):
wb1['A%s' % n] = line + 1
n += 1
wb_obj.save('表1.xlsx')