json,pickle,collections,openpyxl模块
json模块
它是一个序列化模块
json:
是一个‘第三方’的特殊数据格式
可以将python数据类型---------》json数据格式---------》字符串----------》文件中
其他语言要想使用python的数据:
文件中---------》字符串------------》json数据格式------------》其他语言的数据类型
注意:在json中,所有的字符串都是双引号
元组比较特殊:
python中的元组,若将其转换成json数据,内部会将元组转换成列表
import json tup = (1, 2, 3) with open(r'user.txt', 'w', encoding='utf-8') as rf: json.dump(tup, rf, ensure_ascii=False) [1, 2, 3]
set是不能转换成json数据的
为什么要使用json:
为了让不同的语言之间数据可以分享
如何使用:
import json
json.dumps:
json.dumps() , f=open() -------->f.write()
json_str = json.dumps(tup) print(json_str) str1 = '你是谁啊' json_str = json.dumps(str1) print(json_str) "\u4f60\u662f\u8c01\u554a" json_str1 = json.dumps(str1,ensure_ascii=False) "你是谁啊"
序列化
json.loads:
f = open(), str = f.read(), json.loads(str)
python_data = json.loads(json_str) print(python_data) 你是谁啊
反序列
json.dump()
内部实现 f.write()
json.load()
内部实现f.read()
dump,load:使用更方便
注意:保存json数据时,用.json作为文件的后缀名
ensure_ascii将默认的ascii取消设置为False,可以在控制台看到中文,否则在控制台看到中文,否则看到的是bytes类型数据
import json tup = (1, 2, 3) with open(r'user.json', 'w', encoding='utf-8') as wf: json.dump(tup, wf, ensure_ascii=False) [1, 2, 3] with open(r'user.json','r',encoding='utf-8') as rf: tup_txt = json.load(rf) print(tup_txt) print(type(tup_txt)) [1, 2, 3] <class 'list'>
pickle模块:
pickle是一个python自带的序列化模块
优点:
可以支持python中所有的数据类型
可以直接存‘bytes类型’的数据,pickle存取速度更快
缺点:
只能支持python去使用,不能跨平台
import pickle set1 = { 1, 2, 3, 4 } with open(r'user1.pickle', 'wb') as f: pickle.dump(set1, f) with open(r'user1.pickle', 'rb') as f: print(pickle.load(f)) �cbuiltins set q ]q(KKKKe�qRq. {1, 2, 3, 4}
python中的元组,若将其转换成pickle数据,内部不会将元组转换成列表
tuple1 = (1,2,3) tuple1_obj = pickle.dumps(tuple1) print(tuple1_obj) print(pickle.loads(tuple1_obj b'\x80\x03K\x01K\x02K\x03\x87q\x00.' (1, 2, 3)
python默认八大数据:
-整型
-浮点型
-字符串
-字典
-元组
-列表
-集合
-布尔
collections模块:
提供一些python八大数据类型“以外的数据类型”
具名元组:
具名元组 只是一个名字
应用场景:
坐标
from collections import namedtuple
有序字典:
python中的字典是无序的
collections中提供了有序的字典
from collections import OrderedDict
具名元组
from collections import namedtuple
传入可迭代对象是有序的
应用:坐标
将’坐标‘变成’对象‘的名字
from collections import namedtuple point = namedtuple('坐标',['x','y']) # point = namedtuple('坐标','x y') # # point = namedtuple('坐标',('x','y')) p = point(1, 2) print(p) print(type(p)) 坐标(x=1, y=2) <class '__main__.坐标'>
演员的信息
p = namedtuple('电影', ['city', 'movie_type', 'name']) data = p('大阪', 'action', 'c老师') print(data) 电影(city='大阪', movie_type='action', name='c老师')
有序字典
from collections import OrderedDict order_dict = OrderedDict({'x': 1, 'y': 2}) print(order_dict) print(type(order_dict)) print(order_dict['x']) print(order_dict.get('y')) OrderedDict([('x', 1), ('y', 2)]) <class 'collections.OrderedDict'> 1 2
生成扑克牌:
# 获取扑克牌对象 card = namedtuple('扑克牌', 'color number') # 由扑克牌对象产生一张张扑克牌 red_A = card('♥', 'A') red_K = card('♠', 'K') print(red_A, red_K) 扑克牌(color='♥', number='A') 扑克牌(color='♠', number='K')
openpyxl模块
这是第三方模块
可以对excel表格进行操作的模块
下载:
pip3 install openpyxl
excel版本:
2003之前:
excle名字: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('python1', 1) # wb2 = wb_obj.create_sheet('python2', 2) # # print(wb_obj) # # wb_obj.save('尼玛炸了.xlsx') # # 修改工作表名字,将python1改为大宝贝 # print(wb1.title) # 文件处于打开状态时,不允许访问 ************* # wb1.title = '艺昕大宝贝.xlsx' # print(wb1.title) # # 为第一张工作表添加值 # # wb1['工作簿中的表格未知'] # wb1['A10'] = 200 # wb1['B10'] = 1000 # wb1['C10'] = '=SUM(A10:b10)' # wb2['A1'] = 100 # wb_obj.save('唐艺昕大宝贝.xlsx') # print('excel表格生成成功!') # # 读取数据 wb_obj = load_workbook('唐艺昕大宝贝.xlsx') print(wb_obj) # wb_obj['表名'] wb1 = wb_obj['艺昕大宝贝.xlsx'] print(wb1['A10'].value) wb1['A10'] = 20 print(wb1['A10'].value) wb_obj.save('唐艺昕大宝贝.xlsx') # 批量写入数据 dict1 = {'name': 'tank', 'age': 17 } wb_obj = Workbook() wb1 = wb_obj.create_sheet('ship.xlsx') n = 1 for key, value in dict1.items(): wb1['A%s' % n] = key wb1['B%s' % n] = value n += 1 wb_obj.save('批量插入的数据.xlsx')