zoukankan      html  css  js  c++  java
  • json、pickle、collections、openpyxl模块

    一、json模块

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

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

    json是一个第三方的特殊数据模式,可以将python数据类型 ----》 json数据格式 ----》 字符串 ----》 文件中

    其他语言要想使用python的数据:
      文件中 ----》 字符串 ----》 json数据格式 ----》 其他语言的数据类型。

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

      python中的元组,若将其转换成json数据,内部会将元组 ---> 列表

        set集合不能转成json数据

    为什么要使用json:

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

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

    如何使用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作为文件的后缀名

    列表

     1 import json
     2 # 列表
     3 list1 = ['', '', 'c']
     4 # dumps: 将python数据 ---》 json数据格式 ---》 字符串
     5 # ensure_ascii将默认的ascii取消设置为False,可以在控制台看到中文,否则看到的是bytes类型数据
     6 json_str_b = json.dumps(list1)
     7 json_str = json.dumps(list1, ensure_ascii=False)
     8 print(json_str_b, json_str)
     9 print(type(json_str_b))
    10 
    11 # json.loads()字符串 ----> json数据格式 ---》将python数据
    12 python_data = json.loads(json_str)
    13 python_data_b = json.loads(json_str_b)
    14 print(python_data, python_data_b)
    15 print(type(python_data))

    元组

     1 # 元组
     2 tuple1 = ('', '', 'c')
     3 # dumps: 将python数据 ---》 json数据格式 ---》 字符串
     4 # ensure_ascii将默认的ascii取消设置为False,可以在控制台看到中文,否则看到的是bytes类型数据
     5 json_str = json.dumps(tuple1, ensure_ascii=False)
     6 print( json_str)
     7 print(type(json_str))
     8 
     9 # json.loads()字符串 ----> json数据格式 ---》将python数据
    10 python_data = json.loads(json_str)
    11 print(python_data)
    12 print(type(python_data))

    字典

     1 # 字典
     2 dict1 = {
     3     'name': '张三',
     4     'age': 18
     5 }
     6 # # dumps: 将python数据 ---》 json数据格式 ---》 字符串
     7 # # ensure_ascii将默认的ascii取消设置为False,可以在控制台看到中文,否则看到的是bytes类型数据
     8 json_str = json.dumps(dict1, ensure_ascii=False)
     9 print(json_str)
    10 print(type(json_str))
    11 #
    12 # # json.loads()字符串 ----> json数据格式 ---》将python数据
    13 python_date = json.loads(json_str)
    14 print(python_date)
    15 print(type(python_date))

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

     1 # 使用dump、load操作简易注册登录
     2 
     3 username = input('请输入用户名:').strip()
     4 password = input('请输入密码:').strip()
     5 re_pasword = input('再输入一次密码:').strip()
     6 if password == re_pasword:
     7     dict1 = {
     8         'name': username, 'pwd': password
     9     }
    10     with open('user.json', 'w', encoding='utf-8')as wf:
    11         json.dump(dict1, wf)
    12 print('注册成功...
    ', '请继续登录')
    13 name = input('输入用户名:').strip()
    14 pwd = input('密码:').strip()
    15 with open('user.json', 'r', encoding='utf-8')as rf:
    16     user_dict = json.load(rf)
    17 if name == user_dict.get('name') and pwd == user_dict.get('pwd'):
    18     print('登录成功...')
    19 else:
    20     print('登录失败')

    二、pickle模块

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

    优点:
      - 可以支持python中所有的数据类型
      - 可以直接存 "bytes类型" 的数据,pickle存取速度更快

    缺点: (致命的缺点)
      - 只能支持python去使用,不能跨平台

     1 import pickle
     2 
     3 set1 = {
     4     'a', 'b', ''
     5 }
     6 
     7 # 写dump
     8 with open('user1.pickle','wb')as f:
     9     pickle.dump(set1, f)
    10 
    11 # 读load
    12 with open('user1.pickle','rb')as f:
    13     pickle_str = pickle.load(f)
    14     print(pickle_str)

    三、collections,模块

    1、 python默认八大数据:
      - 整型
      - 浮点型
      - 字符串
      - 字典
      - 元组
      - 列表
      - 集合
      - 布尔
    collections模块:
      - 提供一些python八大数据类型 “以外的数据类型” 。
      - 具名元组:
        具名元组 只是一个名字。
      应用场景:
      - 坐标
      from collections import namedtuple

     1 # 具名元组
     2 from collections import namedtuple
     3 
     4 # 传入可迭代对象是有序的
     5 # 应用:坐标
     6 # 将'坐标'变成 “对象” 的名字
     7 point = namedtuple('坐标', ['x', 'y'])    # 第二个参数既可以传可迭代对象
     8 point = namedtuple('坐标', ('x', 'y'))
     9 point = namedtuple('坐标', 'x y')
    10 
    11 # 会将 1 ---> x,   2 ---> y
    12 # 传参的个数,要与namedtuple第二个参数的个数一一对应
    13 p = point(1, 2)
    14 print(p)
    15 print(type(p))
    1 # 扑克牌:
    2 # 获取扑克牌对象
    3 card = namedtuple('扑克牌', 'color number')
    4 black_A = card('', 'A')
    5 red_K = card('', 'K')
    6 
    7 print(black_A)
    8 print(red_K)

    - 有序字典:
      - python中字典默认是无序
      - collections中提供了有序的字典
      from collections import OrderedDict

     1 # 无序字典
     2 dic = dict({'a':1, 'b':2})
     3 print(dic)
     4 print(type(dic))
     5 for line in dic:
     6     print(line)
     7 
     8 # 有序字典,但是不能用索引取值
     9 from collections import OrderedDict
    10 order_dict = OrderedDict(dic)
    11 print(order_dict, '打印有序的字典')
    12 print(type(order_dict))
    13 print(order_dict.get('a'))
    14 print(order_dict['a'])
    15 
    16 for line in order_dict:
    17     print(line)

    四、openpyxl模块

    openpyxl模块:第三方模块
    - 可以对Excle表格进行操作的模块

    写入数据

     1 # 写入数据
     2 from openpyxl import Workbook
     3 # 获取Excel文件对象
     4 wb_obj = Workbook()
     5 #
     6 wb1 = wb_obj.create_sheet('第1个工作表', 0)  # 第一个参数是表名,第二个是表示第几个工作簿
     7 wb2 = wb_obj.create_sheet('第2个工作表', 1)
     8 
     9 # 修改工作表名字: 为第1个工作表标题修改名字
    10 print(wb1.title)
    11 wb1.title = 'aa'
    12 print(wb1.title)
    13 
    14 # 为第一张工作表添加值
    15 # wb1['工作簿中的表格位置']
    16 wb1['A10'] = 200
    17 wb1['B10'] = 1000
    18 wb1['C10'] = '=SUM(A10:B10)'
    19 
    20 wb2['A1'] = 100
    21 
    22 # 生成Excel表格
    23 wb_obj.save('python.xlsx')

    读取数据

     1 # 读取数据
     2 from openpyxl import load_workbook
     3 wb_obj = load_workbook('python.xlsx')
     4 print(wb_obj)
     5 
     6 # wb_obj['表名']
     7 wb1 = wb_obj['第1个工作表']
     8 print(wb1['A10'].value)
     9 wb1['A10'] = 20
    10 print(wb1['A10'].value)
    11 wb_obj.save('python.xlsx')
     1 # 批量写入100条数据
     2 from openpyxl import Workbook
     3 wb_obj = Workbook()
     4 wb1 = wb_obj.create_sheet('工作表1', 0)
     5 # wb1['表格位置'] = 对应的值
     6 # n = 1
     7 # for line in range(10):
     8 #     wb1['A%s' % n] = line
     9 #     n += 1
    10 
    11 # 插入字典数据
    12 dict1 = {
    13     'name': 'abc',
    14     'age': 18
    15 }
    16 
    17 n = 1
    18 for key, value in dict1.items():
    19     wb1['A%s' % n] = key
    20     wb1['B%s' % n] = value
    21     n += 1
    22 wb_obj.save('批量插入数据2.xlsx')
  • 相关阅读:
    使用uibesizerpath + Cashaplayer画椭圆
    国庆节,回乡
    慎用单例
    终于碰到iOS对象集合深拷贝的坑
    Oracle 按表名导出数据
    代理模式(Proxy Pattern)
    享元模式(Flyweight Pattern)
    外观模式(Facade Pattern)
    组合模式
    装饰者模式
  • 原文地址:https://www.cnblogs.com/hexianshen/p/11883160.html
Copyright © 2011-2022 走看看