1 2 3 4

模块二

模块的分类二

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')

posted @ 2019-11-19 17:16  ^更上一层楼$  阅读(120)  评论(0编辑  收藏  举报