zoukankan      html  css  js  c++  java
  • day-16 json模块,pickle模块,collections模块,openpyxl模块

    json模块

    json是一个序列化模块。

    json:

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

    可以将python数据类型 ----》 json数据格式 ----》 字符串 ----》 文件中
    其他语言要想使用python的数据:
    文件中 ----》 字符串 ----》 json数据格式 ----》 其他语言的数据类型。
    注意: 在json中,所有的字符串都是双引号

    ​ 元组比较特殊:

    ​ python中的元组,若将其转换成json数据,内部会将元组 先转化为 列表#

    ​ set(集合)是不能转换成json数据

    列表
    注意:json中字符串用的是列表。
    list1 = ['张全蛋', '李小花']
    # dumps:将python数据--->json数据--->字符串
    # ensure_ascii将默认的ascii取消设置为False,可以在控制台看到中文,否则看到的是bytes类型文件
    json_str = json.dumps(list1, ensure_ascii=False)
    print(json_str)
    print(type(json_str))   #字符串------>序列化
    
    # json.loads()       字符串--->json数据格式--->字符串
    python_data = json.loads(json_str)
    print(python_data)
    print(type(python_data))    #列表------>反序列化
    
    # 元组
    tuple1 = ('张全蛋', '李小花')
    json_str = json.dumps(tuple1, ensure_ascii=False) #ensure_ascii默认是ture。他不能识别中文。
    print(json_str)
    print(type(json_str))   # str
    
    # json.loads()       字符串--->json数据格式--->字符串
    python_data = json.loads(json_str)
    print(python_data)
    print(type(python_data))  #list.python中元组若将其转换成json文件,内部会将其元组转化为列表。
    
    字典
    dic = {
        'name': 'tank',
        'age': 17
    }
    json_str = json.dumps(dic, ensure_ascii=False)
    print(json_str)
    print(type(json_str))      #str  表现形式和字典相同,但属于字符串
    
    python_data = json.loads(json_str)
    print(python_data)
    print(type(python_data))    #dict
    
    

    为什么要使用json:

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

    PS: 由于各种语言的数据类型不一,但长相可以一样,比如python不能直接使用其他语言的数据类型,必须将其他语言的数据类型转换成json数据格式,python获取到json数据后可以将json转换成pyton的数据类型。

    - 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()
    ;l'l
        - dump, load: 使用更方便
    
    注意: 保存json数据时,用.json作为文件的后缀名
    

    注册功能demo

    def register():
    	username = input("请输入用户名:").strip()
    	password = input('请输入密码:').strip()
    	re_password = input('请再次输入密码')
    	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()
    

    pickle模块

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

    优点:

    ​ 可以支持python中所有的数据类型

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

    缺点: (致命的缺点)

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

    # pickle模块
    set1 = {
        'tank', 'sean', 'jason', '大脸'
    }
    # 写dump
    with open('teacher.pickle', 'wb')as f:
    	pickle.dump(set1, f)
    # 读 load
    with open('teacher.pickle', 'rb') as f:
        python_set = pickle.load(f)
        print(python_set)   # {'sean', 'tank', '大脸', 'jason'}
        print(type(python_set))  # set(集合类型)
    

    collections模块

    python默认的八大数据类型:

    ​ 整型(int)

    ​ 浮点型(float)

    ​ 字符串(str)

    ​ 字典(dict)

    ​ 集合(set)

    ​ 元组(tuple)

    ​ 列表(list)

    ​ 布尔(bool)

    collections模块:

    ​ 提供八大数据类型以外的数据类型

    具名元组:

    ​ 具名元组只是一个名字,

    ​ 应用场景: 坐标

    ​ from collections import namedtuple

    ​ 有序字典:

    ​ python中的字典默认是无序的。

    ​ collections中提供了有序的字典

    ​ from collections import OrderedDict

    print(namedtuple('坐标', ['x', 'y']))  #第二个参数可以传可迭代对象
    print(namedtuple('坐标', ('x', 'y')))  #第二个参数可以传可迭代对象
    print(namedtuple('坐标', 'x y'))   #第二个参数可以传可迭代对象
    
    # # 会将 1 ---> x,   2 ---> y
    # 传参的个数,要与namedtuple第二个参数的个数一一对应
    p = print(1, 3)
    print(p)   # 1 3
    print(type(p))   #<class 'NoneType'>(空类型)
    # 扑克牌
    #获取扑克牌对象
    card = namedtuple('扑克牌', ['color', 'number'])
    #由扑克牌对象产生一张扑克牌
    red_A = card('♥', 'A')
    print(red_A)
    black_K = card('♠', 'K')
    print(black_K)
    

    openpyxl模块

    openpyxl模块:第三方模块

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

      • 下载:

        ​ pip3 install openpyxl

        Excel版本:

        ​ 2003之前: excle名字.xls

        ​ 2003以后: excle名字.xlsx

    给自己的python换下载的的第三方源
    - 清华源: https://pypi.tuna.tsinghua.edu.cn/simple
    
    - 配置永久第三方源:
        D:Python36Libsite-packagespip\_internalmodelsindex.py
    
    from openpyxl import Workbook
    #获取Excel
    wb_obj = Workbook()
    wb1 = wb_obj.create_sheet('python13期工作表1', 1)
    wb2 = wb_obj.create_sheet('python13期工作表2', 2)
    # 修改工作表名字:把python13期工作表1标题改名字为加油!!!
    print(wb1.title)
    wb1.title = '加油!!!'
    print(wb1.title)
    #为第一张工作表添加值
    # wb1['工作簿中的表格位置']
    wb1['A10'] = 200
    wb1['B10'] = 1000
    wb1['C10'] = 'SUM(A10:B10)'
    
    wb2['A1'] = 100
    #生成Excel表格
    wb_obj.save('python13期.xlsx')  #前期所有步骤都显示不出来列表,只有执行save(保存)                    
    print('excel表格生成成功')
    
    # 读取数据
    from openpyxl import load_workbook
    wb_obj = load_workbook('python13期.xlsx')
    # print(wb_obj)   # 打印wb_obj的地址
    wb1 = wb_obj['加油!!!']
    print(wb1['A10'].value)   #打印A10的值
    wb1['A10'] = 20    #修改A10对应的值
    print(wb1['A10'].value)
    
    # 批量写入100条数据
    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
    #需要打印表格才会生成新的表格
    wb_obj.save('工作表1.xlsx')
    print('工作表1打印成功')
    
    #假设:一万条数据的字典
    dict1 = {
        'name': 'tank',
        'age': 17
    }
    n = 1
    init_val = 65
    chr(65)  # 65-90
    for key, value in dict1.items():
        wb1['A%s' % n] = key
        wb1['B%s' % n] = value
        n += 1
    
    wb_obj.save('批量插入的数据2.xlsx')
    
    
  • 相关阅读:
    单件模式 Singleton---Design Pattern 5
    Web请求中同步与异步的区别
    zepto和jquery的区别,zepto的不同使用8条小结
    zepto判断左右滑动
    移动web终端交互优化
    Flexbox
    设计移动web
    viewport
    Pixel移动开发像素知识
    获取元素的left值
  • 原文地址:https://www.cnblogs.com/lishuangjian/p/11892850.html
Copyright © 2011-2022 走看看