sys和序列化模块

sys 模块

sys模块是与python解释器交互的一个接口

处理命令行参数

在解释器启动后,argv列表包含了传递脚本的所有参数,列表的第一个元素是脚本自身的名称。

import sys
print(sys.argv[0])
print(sys.byteorder)  # 显示python解释器有关的版本信息
print(sys.copyright)  # 显示python解释器在磁盘上的存储路径
print(sys.getfilesystemencoding())  # 显示python显示器所在的平台
print(sys.maxsize)  # 显示python整数支持的最大值print
print(sys.platform)  # 显示当前python解释器的版本信息
print(sys.version)  # 返回当前python解释器的主版本号
#输出
['D:/STUDY/周日python学习/PycharmProjects/untitled/test1.py']
...

序列化模块

  • 序列化

    • 概念:将一个对象从内存中转换为可存储(字符串类型)或者可传输(bytes)类型的过程
    • Python中叫pickling。
  • 意义:

    • 持久化数据类型
    • 跨平台交互使用
    • 使程序更易维护

json

json格式在各个语音中都可以通用的序列化格式。在json中,所有的字符串必须为双引号(")。

json类型python类型
{}dict
[]list
“string”str
1234.56int/float
true/falseTrue/False
nullNone
  • json的优缺点

    • 优点:所有的数据类型是各语言通用的
    • 缺点:
      • json只支持比较少的数据类型
      • 对数据类型的约束十分严格
        • 字典中key必须是字符串
        • json只支持列表,字典,数值,字符串,以及布尔值
  • 四个功能

    • dumps
    import json
    
    dic = {'name': 'riku', 'age': 20, 'type': 'A', 6: 6}
    sr_dic = json.dumps(dic)    #序列化过程,将字典转化为一个字符串
    print(sr_dic)
    print(type(sr_dic))
    #输出
    {"name": "riku", "age": 20, "type": "A", "6": 6}
    <class 'str'>
    #如果是元组,序列化是强转为列表,若元组作为字典的键,序列化时报错。
    

    如果把数据类型直接序列化写入文件中,可以用dump和load的方法

    • loads
    import json
    
    dic = {'name': 'riku', 'age': 20, 'type': 'A', 6: 6}
    sr_dic = json.dumps(dic)
    print(sr_dic)
    print(type(sr_dic))
    dic_2 = json.loads(sr_dic)			#反序列化过程,但数字还是字符串
    print(dic_2)
    print(type(dic_2))
    #输出
    {"name": "riku", "age": 20, "type": "A", "6": 6}
    <class 'str'>
    {'name': 'riku', 'age': 20, 'type': 'A', '6': 6}
    <class 'dict'>
    
    • load

    • dump

    import json
    
    dic = {'name': 'riku', 'age': 20, 'type': 'A', 6: 6}
    with open('test.txt', 'w') as f:
        json.dump(dic, f)  # dump方法可以接受一个文件句柄,直接将字典-->字符串,写入文件中
    
    with open('test.txt') as f:
        ret = json.load(f)
        print((ret, type(ret)))
    #输出
    ({'name': 'riku', 'age': 20, 'type': 'A', '6': 6}, <class 'dict'>)
    
  • load通过json.load(open(’*.json’))这样的格式,从文件句柄中打开文件,加载到Python的变量中,并以字典的格式转换。而loads必须对于Python内存中的序列化对象转换成字符串。

pickle

  • 只用于python

  • 内存中结构化的数据<-------->格式pickle<-------->bytes类型<-------->保存文件或基于网络传输

  • pickle优缺点

    • 优点

      • 优点支持python中的几乎所有类型
      • pickle会把数据类型序列化bytes类型
  • 缺点

    • 只支持python
  • 四个功能

    • 序列化
      • dumps
      • dump
    • 反序列化
      • loads
      • load
import pickle

dic = {'name': 'riku', 'age': 20, 'type': 'A', 6: 6}
sr_dic = pickle.dumps(dic)
print(sr_dic, type(sr_dic))
dic1 = pickle.loads(sr_dic)
print(dic1, type(dic1))
#输出
b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x04\x00\x00\x00rikuq\x02X\x03\x00\x00\x00ageq\x03K\x14X\x04\x00\x00\x00typeq\x04X\x01\x00\x00\x00Aq\x05K\x06K\x06u.' <class 'bytes'>
{'name': 'riku', 'age': 20, 'type': 'A', 6: 6} <class 'dict'>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值