模块二之序列化模块以及collections模块

网友投稿 683 2022-09-12

模块二之序列化模块以及collections模块

模块二之序列化模块以及collections模块

一、序列化模块

json模块

'''

序列化:将python或其他语言的数据类型转换成字符串类型

json模块: 是一个序列化模块。

json:

是一个 “第三方” 的特殊数据格式。

可以将python数据类型 ----》 json数据格式 ----》 字符串 ----》 文件中

其他语言要想使用python的数据:

文件中 ----》 字符串 ----》 json数据格式 ----》 其他语言的数据类型。

注意: 在json中,所有的字符串都是双引号

# 元组比较特殊:

python中的元组,若将其转换成json数据,内部会将元组 ---> 列表(变成可变类型)

# set是不能转换成json数据

为什么要使用json:

- 为了让不同的语言之间数据可以共享。

PS: 由于各种语言的数据类型不一,但长相可以一样,

比如python不能直接使用其他语言的数据类型,

必须将其他语言的数据类型转换成json数据格式,

python获取到json数据后可以将json转换成pyton的数据类型。

如何使用:

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

#列表

list = ['亚峰', '小明', '热巴']

#dumps是序列化:将python数据(或其他语言)---->json数据格式------>字符串

#ensure_ascii默认是True

json_str = json.dumps(list)

print(json_str)

>>>["\u4e9a\u5cf0", "\u5c0f\u660e", "\u70ed\u5df4"]

#

#

#ensure_ascii=Falise可通过这种方式实现原有的样子

json_str = json.dumps(list, ensure_ascii=False)

print(json_str)

>>>["亚峰", "小明", "热巴"]

print(type(json_str))

>>>

#

#

#loads是反序列化:字符串----->json数据格式------->python数据(其他语言)

python_data = json.loads(json_str)

print(python_data)

>>>['亚峰', '小明', '热巴']

print(type(python_data))

>>>

#元祖

tuple1 = ('亚峰', '小明', '热巴')

json_str = json.dumps(tuple1)

print(json_str)

>>>["\u4e9a\u5cf0", "\u5c0f\u660e", "\u70ed\u5df4"]

json_str = json.dumps(tuple1, ensure_ascii=False)

print(json_str)

>>>["亚峰", "小明", "热巴"]在json中""代表字符串

print(type(json_str))

>>>

#

python_data = json.loads(json_str)

print(python_data)

>>>['亚峰', '小明', '热巴']

print(type(python_data))

>>>

#

#

#字典

dic = {

'name': 'yafeng',

'age': '18'

}

json_str = json.dumps(dic)

print(json_str)

>>>{"name": "yafeng", "age": "18"}

print(type(json_str))

>>>

json_str = json.dumps(dic, ensure_ascii=False)

print(json_str)

>>>{"name": "yafeng", "age": "18"}

#

#

python_obj = json.loads(json_str)

print(python_data)

>>>['亚峰', '小明', '热巴']

print(type(python_data))

>>>['亚峰', '小明', '热巴']

#

#

# #****注意集合是不能被序列化成json****

set1 = {1, 2, 3, 4}

json_str = json.dumps(set1)

print(json_str)

>>>TypeError: Object of type set is not JSON

>>>serializable(序列化)

#注册功能

# def register():

# username = input('请输入您的姓名:').strip()

# password = input('请输入您的密码:').strip()

# re_password = input('请确认您的密码:').strip()

# if password == re_password:

# user_dic = {

# 'name': 'username',

# 'pwd': 'password'

# }

# json_str = json.dumps(user_dic, ensure_ascii=False)

#

# #开始写入文件

# #保存json数据时,用.json做后缀

# with open('user.json','w',encoding='utf-8')as f:

# f.write(json_str)

#

# register()

#dump,load的用法

import json

user_dic = {

'name': 'yafeng',

'age': 18

}

with open('user1.json', 'w', encoding='utf-8')as f:

json.dump(user_dic, f)#先open,在write

with open('user2.json', 'w', encoding='utf-8')as f:

json.dump(user_dic, f)

with open('user2.json', 'r', encoding='utf-8')as f:

user_dic = json.load(f)

print(user_dic)

print(type(user_dic))

#>>>{'name': 'yafeng', 'age': 18}

#>>>

pickle模块

'''

pickle模块:

pickle是一个python自带的序列化模块。

优点:

- 可以支持python中所有的数据类型(集合也行)

- 可以直接存 "bytes类型" 的数据,pickle存取速度更快

缺点: (致命的缺点)

- 只能支持python去使用,不能跨平台

'''

import pickle

dic = {

'name': 'yafeng',

'age': '18',

'love': '热巴'

}

#转换成序列化dump(bytes)

with open('yafeng.pickle', 'wb')as f:

pickle.dump(dic, f)

#读换成原来的

with open('yafeng.pickle', 'rb')as f:

python_dic = pickle.load(f)#注意load只能加载一个对象

print(python_dic)

#>>>{'name': 'yafeng', 'age': '18', 'love': '热巴'}

print(type(python_dic))

#>>>

set1 = {'yafeng', '18', '热巴'}

with open('1.pickle', 'wb')as f:

pickle.dump(set1, f)

with open('1.pickle', 'rb')as f:

python_set = pickle.load(f)

print(python_set)

#>>>{'18', '热巴', 'yafeng'}

print(type(python_set))

#>>>

二、collections 模块

具名元组

'''

- python默认八大数据:

- 整型

- 浮点型

- 字符串

- 字典

- 元组

- 列表

- 集合

- 布尔

collections模块:

- 提供一些python八大数据类型 “以外的数据类型” 。

- 具名元组:

具名元组 只是一个名字。

应用场景:

- 坐标

-

from collections import namedtuple

- 有序字典:

- python中字典默认是无序

- collections中提供了有序的字典

from collections import OrderedDict

'''

#具名元组

from collections import namedtuple

#传入的可迭代对象是有序的即可索引取值(比如列表,元组,字符串)

#应用1:坐标

#将‘坐标’变成‘对象’的名字

point = namedtuple('坐标', ['x', 'y'])#此时的第二个参数既可以传可迭代对象

point = namedtuple('坐标', ('x', 'y'))#此时的第二个参数既可以传可迭代对象

point = namedtuple('坐标', 'x y')#此时的第二个参数既可以传可迭代对象,注意字符串中的每个元素之间必须以空格隔开

#传参的个数要与第二个参数的个数一致

p = point(1, 2)

print(p)

#坐标(x=1, y=2)

print(type(p))

#

#应用2、扑克牌

#获取扑克牌对象

card = namedtuple('扑克牌', ['color', 'number'])#此时就是扑克牌对象

#由扑克牌对象产生一张 扑克牌

red_A = card('❤', 'A')

print(red_A)

#>>>扑克牌(color='❤', number='A')

print(type(red_A))

#>>>

black_k = card('♠', 'K')

print(black_k)

#>>>扑克牌(color='♠', number='K')

print(type(black_k))

#>>>

#应用3、影片的信息

p = namedtuple('岛国', ['city', 'movie_type', 'name'])

movie_info = p('东京', '爱情动作片', 'cang老师')

print(movie_info)

#>>>岛国(city='东京', movie_type='爱情动作片', name='cang老师')

print(type(movie_info))

#>>>

#2、有序字典

#python中默认字典是无序的*****很重要******

dic = {

'name': 'yafeng',

'age': 18,

'love': '热巴'

}

print(dic)

#>>>{'name': 'yafeng', 'age': 18, 'love': '热巴'}

print(type(dic))

#>>>

for i in dic:

print(i)

#>>>name

#>>>age

#>>>love

#有序字典

from collections import OrderedDict

order_dic = OrderedDict(dic)

print(order_dic)

#>>>OrderedDict([('name', 'yafeng'), ('age', 18), ('love', '热巴')])

print(type(order_dic))

#>>>

print(order_dic.get('love'))

#>>>热巴

print(order_dic['love'])

#>>>热巴

for i in order_dic:

print(i)

#name

#age

#love

三、openpyxl模块

openpyxl(可对ecxel表格进行操作的模块)

# '''

# openpyxl模块:第三方模块

# - 可以对Excle表格进行操作的模块

#

# - -:

# pip install openpyxl

#

# - Excel版本:

# 2003之前:

# excle名字.xls

#

# 2003以后:

# excle名字.xlsx

#

# - 清华源: https://pypi.tuna.tsinghua.edu-/simple

#

# - 配置永久第三方源:

# D:C:\Users\占亚峰\AppData\Local\Programs\Python\Python37\Lib\site-packages\pip\_internal\models\index.py

# '''

# #写入数据

# from openpyxl import Workbook

#

# #获取Excel文件对象

# wb_obj = Workbook()

#

# wb1 = wb_obj.create_sheet('亚峰牛皮1', 1)

# wb2 = wb_obj.create_sheet('亚峰牛皮2', 2)

#

# #修改工作表名字,将'亚峰牛皮2'修改成---->'亚峰666'

# print(wb2.title)

# wb2.title = '亚峰666'

# print(wb2.title)

#

#

# #为第一张工作表中添加值

# #wb1['工作簿中的表格位置']

# wb1['A10'] = 123

# wb1['B10'] = 666

# wb1['C10'] = '=SUM(A10:B10)'

#

# #生成Excel表格

# wb_obj.save('亚峰牛皮1.xlsx')

# print('excel表格生成成功')

# #读取数据

# from openpyxl import load_workbook

# wb_obj = load_workbook('亚峰1.xlsx')

# print(wb_obj)

#

# #wb_obj['表名']

# wb1 = wb_obj['亚峰牛皮1']

# print(wb1['A10'].value)

# wb1['A10'] = 666

# print(wb1['A10'].value)

#批量写入100条数据

from openpyxl import Workbook

wb_obj = Workbook()

wb1 = wb_obj.create_sheet('工作表1')

#wb1['表的位置'] = '对应的值'

# n = 1

# for line in range(100):

# wb1['A%s' %n] = line + 1

# n += 1

#假设:一万条数据的字典

dic = {

'name': '亚峰',

'age': 18,

'love': '热巴'

}

n = 1

for key, value in dic.items():

wb1['A%s' %n] = key

wb1['B%s' %n] = value

n += 1

wb_obj.save('批量插入的数据.xlsx')

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:「运维有小邓」Active Directory 密码过期通知功能
下一篇:监控Hyper-V 宿主机上的虚拟机数量
相关文章

 发表评论

暂时没有评论,来抢沙发吧~