模块的分类二
1.序列化:将其他数据类型转换成字符串,可以写入文件中;
2.反序列化:从文件中读取字符串,然后 转换成其他数据类型。
一、json:
-是一个第三方的特殊的数据格式。
-可以将python数据类型———>json数据格式_------->字符串-------->文件中_
-其他语言想要使用python的数据:
-文件中----》字符串------》json数据格式------》其他语言的数据类型
注意:::在json中,所有的字符串都是双引号
为什么要使用json:
-为了让不同语言之间的数据可以共享。
PS:由于各种语言的 数据类型不一,但长相可以是一样的。
比如python 不但可以直接使用其他语言的数据类型。
必须将其他语言的数据类型转换成json的数据格式
python获取到的json数据后,可以将json转换成python的数据类型。
在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作为文件的后缀名
###下面的是如何使用dumps dump loads load
import json
l1 = ['ffg','fffg','gert']
with open(r'user.json','w',encoding = 'utf-8') as f:
json_l1 = json.dumps(l1) ####使用dumps
f.write(json_l1)
with open(r'19.txt','w',encoding = 'utf-8') as f:
res1 = json.dump(l1,f)#####使用dump
print(res1)
>>>>>>>>>>
None
with open(r'user.json','r',encoding = 'utf-8') as f:
res2 = json.loads(f.read())#####使用loads
print(res2)
with open(r'user.json','r',encoding = 'utf-8') as f:
res3 =json.load(f) ######使用load
print(res3)
import json
###dumps: 将python数据 ---》 json数据格式 ---》 字符串
l1 = ['123', 'dfe', 'wsd']
json_l1 = json.dumps(l1)
print(json_l1)
>>>>>>>>
["123", "dfe", "wsd"]
l2 = ['天空','大地']
json_l2 = json.dumps(l2,ensure_ascii = False)ensure_ascii将默认的ascii取消设置为FALSE,可以在控制台看到中文, 否则看到的是bytes的数据类型。
print(json_l2)
print(type(json_l2))
>>>>>>>>>>
["天空", "大地"]
<class 'str'>######打印出来的是字符串
# # json.loads()字符串 ----> json数据格式 ---》将python数据
ython_data = json.loads(json_l2)
print(python_data)
>>>>>>>>>>>>>
['天空', '大地']
<class 'list'>
元组(loads转化后也是list的形式)
l1 = ('aff','ffdf','weeff','1234')
json_l1 = json.dumps(l1)
print(json_l1)
python_l1 = json.loads(json_l1)
print(python_l1)
>>>>>>>
["aff", "ffdf", "weeff", "1234"]###json转换的str是双引号的 而且是list的格式
['aff', 'ffdf', 'weeff', '1234']####loads转化后也是list的形式
字典
l1 = {'aff':'ffdf','weeff':'1234'}
json_l1 = json.dumps(l1)
print(json_l1)
python_l1 = json.loads(json_l1)
print(python_l1)
>>>>>>>
{"aff": "ffdf", "weeff": "1234"}
{'aff': 'ffdf', 'weeff': '1234'}
dump load
l1 = ['aff', 'fegg', 'wegty']
with open(r'user.json','w',encoding = 'utf-8') as f:
json_l1 = json.dump(l1,f)
print(json_l1)
>>>>>>>>>>>
None ####user.json 会存在
with open(r'user.json','r',encoding = 'utf-8') as f:
json_l2 = json.load(f)
print(json_l2)
print(type(json_l2))
>>>>>>>>>>>>>>>
['aff', 'fegg', 'wegty']
<class 'list'>
二、pickle
-pickle是一个python自带的序列化模块
-优点:
-可以支持python的所有的数据类型 包括集合 对象
-可以直接存'bytes类型'的数据,pickle存取的速度快
缺点:
-只支持python去使用,不能跨平台使用
-json的优缺点
-优点:
-支持跨平台,所有语言都可以使用;
-缺点:
-可以支持的python的数据类型有限,不支持集合,对象
-存取速度相较于pickle要慢
import pickle
#dump
set1 = {'faff','dfsgg', 'ggeedd'}
with open(r'dd.pickle','wb',) as f:
pickle.dump(set1,f)
##load
with open(r'dd.pickle','rb') as f:
res = pickle.load(f)
print(res)
print(type(res))
>>>>>>>>>>>>>>
{'dfsgg', 'ggeedd', 'faff'}
<class 'set'> ###这个是元组的
三、collections
-python中默认的八大数据:
-整型
-浮点型
-字典
-元组
-列表
-集合
-布尔
-collections模块:
-提供一些python八大数据“以外的数据”。
-具名元组
-定义:只是一个名字
-应用的场景
-坐标
-有序的字典
-python中的字典默认是无序的
-collections中提供了有序的字典
#具名元组,传入的对象要是有序的
from collections import namedtuple
#将坐标变成对象的名字
# point = namedtuple('坐标',['x','y']) #第二是参数可以是可迭代的对象
# point = namedtuple('坐标',('x','y'))#第二个参数是可迭代的对象
point = namedtuple('坐标','x,y')#第二个参数是可可迭代对象
p = point(1,3) #传参的格式要跟 namedtuple保持一致
print(p)
print(type(p))
>>>>>>>>>>>>>
坐标(x=1, y=3)
<class '__main__.坐标'>
#演员的信息
actor_induce = namedtuple('中国',('性别','籍贯','老家'))
xusong = actor_induce('男','安徽','china')
print(xusong)
>>>>>>>>>>
中国(性别='男', 籍贯='安徽', 老家='china')
#扑克牌
#获取扑克牌的对象
card = namedtuple('牌',['color','number'])
#由扑克牌对象产生一张扑克牌
red_A = card('红桃A','A')
print(red_A)
>>>>>>>>>
牌(color='红桃A', number='A')
#有序的字典
#我们之前学的字典默认都是无无序的
dict1 = dict({'x':1,'y':2})
print(dict1)
# >>>>>>> {'x': 1, 'y': 2}
for line in dict1:
print(line)
# >>>>>>>> x
# y
#无序的字典
from collections import OrderedDict
OrderedDict_1 = OrderedDict({'x':1,'y': 2,'z':3})
print(OrderedDict_1)
>>>>>>>>> OrderedDict([('x', 1), ('y', 2), ('z', 3)])
print(OrderedDict_1.get('y'))
print(OrderedDict_1['y'])
>>>>>>>>>
# 2
# 2
for i in OrderedDict_1:
print(i)
y
z
openpyxl 模块
# from openpyxl import Workbook
# #获取excel的文件对象
# wb_obj = Workbook()
# wb1 = wb_obj.create_sheet('python13期1',2)
# print(wb1)
# #>>>>>>> <Worksheet "python13期1">
# #修改工作表的名字,python13期1---->david
# wb1.title = 'david'
# print(wb1.title)
# #>>>>>> david
# #为第一张工作表添加值
# #wb1['工作表中的位置']
# wb1['A3'] = 200
# wb1['A6'] = 122
# wb1['A10'] = '=SUM(A3:A6)'
# print(wb1['A10'])
# #>>>>>> <Cell 'david'.A10>
# #生成excel表格
# wb_obj.save('david.xlsx')
# # print('表格做好了')
#读取数据
# from openpyxl import load_workbook
#
#
# wb_obj = load_workbook('david.xlsx')
# print(wb_obj)
# #>>>>>>> <openpyxl.workbook.workbook.Workbook object at 0x000001D4C95D43C8>
# #>>>>>>> <openpyxl.workbook.workbook.Workbook object at 0x0000019FC39EC278>
# wb1 = wb_obj['david']
# print(wb1['A6'].value)
# #>>>>>>> 122
# wb1['A6'] = 20
# print(wb1['A6'].value) ###这个是可以修改的 但是在原文件中不能修改 只能新建一个文件修改
# #>>>>>>> 20
from openpyxl import Workbook
wb_obj = Workbook()
wb1 = wb_obj.create_sheet('工作表一')
# n = 1
# for line in range(100):
# wb1['A%s' % n] = line + 1
#
# n += 1
# wb_obj.save('工作表一.xlsx')
dict1 = {
'name':'david',
'age': 18
}
n = 1
for key ,value in dict1.items():
wb1['A%s' %n] = key
wb1['B%s' %n] = value
n += 1
wb_obj.save('插入的表格2.xlsx')