序列化模块

序列化模块

  • 序列化:将Python或其他语言的数据类型转换成字符串类型
    • list1 = [1,2,3]----->"[1,2,3]"
  • Python中的数据类型有:
    • int、float、str、list、dict、tuple、bool、set
  • 序列:指的是字符串
  • 序列化
    • 其他数据类型——>字符串——>文件中
  • 反序列化
    • 文件中——>字符串——>其他数据类型

一、json模块

json模块:是一个序列化模块,是一个“第三方”的特殊数据格式

  • 可以将

    Python数据类型——>json数据格式——>字符串——>文件中

  • 其他语言想要使用Python中的数据:

    文件中——>字符串——>json数据格式——>其他语言的数据类型

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

    元组比较特殊:

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

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

  • 为什么要使用json

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

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

  • 如何使用

    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
    
    list1 = ['123', '321']
    # dumps 将python数据 ——>json数据格式——>字符串
    json_str = json.dumps(list1)
    print(json_str)
    print(type(json_str))
    ["123", "321"]	# 双引号
    <class 'str'>	#str字符串
    
    python_data = json.loads(json_str)
    print(python_data)
    print(type(python_data))
    ['123', '321']
    <class 'list'>
    

二、pickle模块

  • pickle模块:是一个Python自带的序列化模块
    • 优点:
      • 可以支持Python中所有的数据类型
      • 可以直接存“bytes类型”的数据,pickle存取速度更快
    • 缺点:(致命的缺点)
      • 只能支持Python使用,不可以跨平台

import pickle

import pickle
set1 = {'tank', 'sean', 'jason', '大脸'}
with open('teacher.pickle', 'wb')as f:
    pickle.dump(set1, f)

with open('teacher.pickle', 'rb')as f:
    python_set = pickle.load(f)
    print(python_set)
    print(type(python_set))

三、collections模块

  • python默认八大数据:
    • 整形(int)、浮点型(float)、字符串(str)、字典(dict)、元组(tuple)、列表(list)、集合(set)、布尔(bool)
  • collections 模块
    • 提供了一些Python八大数据类型“以外的数据类型”
    • 具名元组
      • 只是一个名字,应用在坐标的场景
    • from collections import namedtuple
  • 有序字典
    • Python中字典默认是无序的
    • collections中提供 了有序的字典
    • from collections import OrderedDict
from collections import namedtuple

point = namedtuple('坐标', ['x', 'y'])

p = point(1, 3)
print(p)
print(type(p))

坐标(x=1, y=3)
<class '__main__.坐标'>

扑克牌

card = namedtuple('扑克牌', ['color', 'number'])
# 由扑克牌对象产生一张扑克牌
red_A = card('♥', 'A')
print(red_A)
black_K = card('♠', 'K')
print(black_K)
meihua_Q = card('♣', 'Q')
print(meihua_Q)
fangpian_J = card('♦', 'J')
print(fangpian_J)

扑克牌(color='♥', number='A')
扑克牌(color='♠', number='K')
扑克牌(color='♣', number='Q')
扑克牌(color='♦', number='J')

python 默认无序字典

# python默认无序字典
dic = dict({'x':1, 'y':2, 'z':3})
print(dic)
print(type(dic))
for line in dic:
    print(line)
    
{'x': 1, 'y': 2, 'z': 3}
<class 'dict'>
x
y
z

有序字典

from collections import OrderedDict
order_dict = OrderedDict({'x':1, 'y':2, 'z':3})
print(order_dict)
print(type(order_dict))
print(order_dict.get('z'))
print(order_dict['z'])
for line in order_dict:
    print(line)

OrderedDict([('x', 1), ('y', 2), ('z', 3)])
<class 'collections.OrderedDict'>
3
3
x
y
z

四、openpyxl模块

openpyxl模块:第三方模块

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

  • 下载:

    • pip3 install openpyxl
  • Excel版本

    • 2003之前: Excel 名字:.xls
    • 2003之后:Excel名字:.xlsx
  • 清华源:https://pypi.tuna.tsinghua.edu.cn/simple

  • 配置永久第三方源:

    D:\Python36\Lib\site-packages\pip_internal\models\index.py

写入数据

from openpyxl import Workbook

读取数据

from openpyxl import load_workbook

# 获取Excel文件对象
wb_obj = Workbook()
wb1 = wb_obj.create_sheet('python工作表1', 1)
wb2 = wb_obj.create_sheet('python工作表2', 2)

# 修改工作表名字:为python工作表1标题修改名字
print(wb1.title)
wb1.title = 'hello big baby'
print(wb1.title)

# 为第一张工作表添加值
wb1['工作簿中的表格位置']
wb1['A1'] = 1000
wb1['B1'] = 2000
wb1['C1'] = '=SUM(A1:B1)'

# 生成Excel表格
wb_obj.save('python.xlsx')
print('Excel表格生成成功')
# 读取数据
from openpyxl import load_workbook
wb_obj = load_workbook('python.xlsx')
print(wb_obj)

wb1 = wb_obj['hello big baby']
print(wb1['A1'].value)
wb1['A1'] = 100
print(wb1['A1'].value)
# 批量写入100条数据
wb_obj = Workbook()
wb1 = wb_obj.create_sheet('工作表1')
n = 1
for line in range(100):
    wb1['A%s' % n] = line + 1
    n += 1

wb_obj.save('表1.xlsx')
posted @ 2019-11-19 20:47  YGZICO  阅读(149)  评论(0编辑  收藏  举报