zoukankan      html  css  js  c++  java
  • 模块二

    模块的分类二

    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')
    
    
  • 相关阅读:
    使用greenDAO遇到的问题
    使用greenDAO生成DAO代码
    Spring中Bean的生命周期
    视频弹幕开源库
    最简MacOs10.8安装
    apache-virtual host
    带删除的EditText
    替换默认debug.keystore文件
    Intellij格式化java和xml
    【数据结构】之二叉树的java实现
  • 原文地址:https://www.cnblogs.com/bs2019/p/11890775.html
Copyright © 2011-2022 走看看