模块二之序列化模块以及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))
>>><class 'str'>
#
#
#loads是反序列化:字符串----->json数据格式------->python数据(其他语言)
python_data = json.loads(json_str)
print(python_data)
>>>['亚峰', '小明', '热巴']
print(type(python_data))
>>><class 'list'>
#元祖
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))
>>><class 'str'>
#
python_data = json.loads(json_str)
print(python_data)
>>>['亚峰', '小明', '热巴']
print(type(python_data))
>>><class 'list'>
#
#
#字典
dic = {
'name': 'yafeng',
'age': '18'
}
json_str = json.dumps(dic)
print(json_str)
>>>{"name": "yafeng", "age": "18"}
print(type(json_str))
>>><class '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}
#>>><class 'dict'>
- 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))
#>>><class 'dict'>
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))
#>>><class '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))
#<class '__main__.坐标'>
#应用2、扑克牌
#获取扑克牌对象
card = namedtuple('扑克牌', ['color', 'number'])#此时就是扑克牌对象
#由扑克牌对象产生一张 扑克牌
red_A = card('❤', 'A')
print(red_A)
#>>>扑克牌(color='❤', number='A')
print(type(red_A))
#>>><class '__main__.扑克牌'>
black_k = card('♠', 'K')
print(black_k)
#>>>扑克牌(color='♠', number='K')
print(type(black_k))
#>>><class '__main__.扑克牌'>
#应用3、影片的信息
p = namedtuple('岛国', ['city', 'movie_type', 'name'])
movie_info = p('东京', '爱情动作片', 'cang老师')
print(movie_info)
#>>>岛国(city='东京', movie_type='爱情动作片', name='cang老师')
print(type(movie_info))
#>>><class '__main__.岛国'>
#2、有序字典
#python中默认字典是无序的*****很重要******
dic = {
'name': 'yafeng',
'age': 18,
'love': '热巴'
}
print(dic)
#>>>{'name': 'yafeng', 'age': 18, 'love': '热巴'}
print(type(dic))
#>>><class 'dict'>
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))
#>>><class 'collections.OrderedDict'>
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.cn/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')
模块二之序列化模块以及collections模块的更多相关文章
- python拓展2 collections模块与string模块
知识内容 1.collections模块介绍 2.collections模块使用 3.string模块介绍及使用 一.collections模块介绍 collections模块中提供了很多python ...
- collections模块-namedtuple
namedtuple -> 命名元组 这里的命名指的是对元组中元素的命名. 通过一个例子来看 import collections Person = collections.namedtuple ...
- python time模块 sys模块 collections模块 random模块 os模块 序列化 datetime模块
一 collections模块 collections模块在内置的数据类型,比如:int.str.list.dict等基础之上额外提供了几种数据类型. 参考博客 http://www.pythoner ...
- day13 函数模块之序列化 random 模块 os模块 sys模块 hashlib模块 collections模块
json import json dic = {'k1':'v1','k2':'v2','k3':'v3'} str_dic = json.dumps(dic) #序列化:将一个字典转换成一个字符串 ...
- 常用模块(collections模块,时间模块,random模块,os模块,sys模块,序列化模块,re模块,hashlib模块,configparser模块,logging模块)
认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的 ...
- collections模块、时间模块、random模块、os模块、sys模块、序列化模块、subprocess模块
一.collections模块 1.其他数据类型 在内置数据类型(str.dict.list.tuple.set)的基础上,collections模块还提供了了几个额外的数据类型:Counter.de ...
- 序列化 ,hashlib ,configparser ,logging ,collections模块
# 实例化 归一化 初始化 序列化 # 列表 元组 字符串# 字符串# .......得到一个字符串的结果 过程就叫序列化# 字典 / 列表 / 数字 /对象 -序列化->字符串# 为什么要序列 ...
- python 全栈开发,Day26(hashlib文件一致性,configparser,logging,collections模块,deque,OrderedDict)
一.hashlib文件一致性校验 为何要进行文件一致性校验? 为了确保你得到的文件是正确的版本,而没有被注入病毒和木马程序.例如我们经常在网上下载软件,而这些软件已经被注入了一些广告和病毒等,如果不进 ...
- python正则以及collections模块
正则 一.认识模块 什么是模块:一个模块就是一个包含了python定义和声明的文件,文件名就是加上.py的后缀,但其实import加载的模块分为四个通用类别 : 1.使用python编写的代码(.p ...
随机推荐
- Linux 按 Ctrl + S 卡死的解决办法
ctrl + s 的作用是暂停屏幕输出 ctrl + q 恢复屏幕输出即可 恢复之后会出现在暂停期间输入的字符
- Linux中环境变量相关文件的区别
Linux下各种不同环境变量相关文件的作用: 1. /etc/environment 设置整个系统的环境,系统启动时,该文件被执行. 2. /etc/profile 设置所有用户的环境,当用 ...
- 阿里蒋晓伟谈计算引擎Flink和Spark的对比
本文整理自云栖社区之前对阿里搜索事业部资深搜索专家蒋晓伟老师的一次采访,蒋晓伟老师,认真而严谨.在加入阿里之前,他曾就职于西雅图的脸书,负责过调度系统,Timeline Infra和Messenger ...
- wpf 模拟抖音很火的罗盘时钟,附源码,下载就能跑
wpf 模拟抖音很火的罗盘时钟,附源码 前端时间突然发现,抖音火了个壁纸,就是黑底蕾丝~~~ 错错错,黑底白字的罗盘时钟! 作为程序员的我,也觉得很新颖,所以想空了研究下,这不,空下来了就用wpf, ...
- day 27-1 反射、内置方法
反射 反射:通过字符串来映射到对象的属性 class People(): def __init__(self, name, age): self.name = name self.age = age ...
- 探索Dynamics 365 用户能够登录使用的最小权限需求
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- Fail-fast
实际上,java.util.Iterator 的大多数实现都提供了故障快速修复(Fail-fast)的机制 ⎯⎯在利用迭代器遍历某一容器的过程中,一旦发现该容器的内容有所改变,迭代器就会抛出 Conc ...
- RTP中的H264的SVC相关信息
概览 本文简单的介绍了rtp中的h264的svc相关信息 h264的svc相关格式信息 从RTP Payload Format for H.264 Video可以看见264在rtp的传输过程中,在rt ...
- 【问题篇四】启动报DataSource错误
初建一个简单的spring boot 项目,启动后会报错:就是在项目启动的时候在 resource目录下没有加载到配置信息:如果项目只是想简单的启动运行,不进行数据库操作可以在 启动类上做如下处理便可 ...
- linux下录屏和回放工具script和scriptreplay
读书是一个长见识的过程,以前偶尔会用到录屏的工具,很少用想系统的学习一下.最近看了linux shell脚本攻略,发现很多新东西是以前自己没有接触到的.比如,这个非常好用的录屏工具:script,这次 ...