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)
"u4f60u662fu8c01u554a"
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'x80x03Kx01Kx02Kx03x87qx00.'
(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:Python36Libsite-packagespip\_internalmodelsindex.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')