设为首页 加入收藏

TOP

Python基础(十六)(一)
2019-10-09 19:57:06 】 浏览:41
Tags:Python 基础 十六

今日主要内容

  • 内置模块(标准库)
    • 序列化
    • hashlib
    • collections
  • 软件开发规范

一、内置模块(标准库)

(一)序列化模块

  • 什么是序列化?
    • 将一种数据结构(如列表、字典)转换为另一种特殊的数据结构(如字符串、bytes类型)的过程就是序列化过程
    • 数据传输的过程中,传输的都是字节,现在有一个列表需要传输,我需要将列表转换为字符串,在将字符串进行编码,但对方最终接收到的是一个字符串,字符串是不能原封不动的还原成列表的,这时候就需要用到反序列化将字符串转换回列表

1.json模块(重要)

  • json文件相当于编程界的普通话,是各种语言交互的枢纽,当数据需要在多种语言间传输,就必须将数据转换成json字符串,对方将接受到的json字符串再转换成对应语言的数据类型,完美还原

  • json模块方法介绍:

    json.dumps() 将对象序列化
    json.loads() 将对象反序列化
    json.dump() 将对象序列化写入文件
    json.load() 将对象读取后反序列化
    • dumps、loads用于网络传输
    • dump、load用于文件写读
    1. json.dumps()

      • 函数定义:dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
      • 函数说明:将对象序列化为json格式的字符串,其余参数中的ensure_ascii:若对象中出现的非ascii字符(如中文)时会被转换,若显示原字符,指定ensure_ascii=False
      import json
      
      print(json.dumps(["张旭东666"]))
      print(json.dumps(["张旭东666"], ensure_ascii=False))
      
      运行结果:
      ["\u5f20\u65ed\u4e1c666"]
      ["张旭东666"]
    2. json.loads()

      • 函数定义:loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
      • 函数说明:将json格式的字符串反序列化
      import json
      
      print(json.loads("[1,2,3,4]"))
      print(type(json.loads("[1,2,3,4]")))
      
      运行结果:
      [1, 2, 3, 4]
      <class 'list'>
    3. json.dump()

      • 函数定义:dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
      • 函数说明:将对象转换为json流写入到文件(fp为文件句柄)中
      import json
      
      with open("text.txt", "w", encoding="utf-8") as f:
          json.dump([1, 2, 3, 4], f)
    4. json.load()

      • 函数定义:load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
      • 函数说明:读取文件句柄并将字符串反序列化
      with open("text.txt", encoding="utf-8") as f:
          lst = json.load(f)
          print(lst)
          print(type(lst))
      
      运行结果:
      [1, 2, 3, 4]
      <class 'list'>
  • 如果向文件中写入多个json串,无法读取,因为在文件中写入的都是一行内容

    • 解决方法1:将所有内容准备好了一次性写入和读取
    import json
    lst = [{"k1": 1}, {"k2": 2}, {"k3": 3}]  # 准备好放在一起
    with open("text.txt", "w+", encoding="utf-8") as f:
      json.dump(lst, f)  # 一起写入
      f.seek(0)
      for el in json.load(f):  # 一起读取
          print(el)
    
    运行结果:
    {'k1': 1}
    {'k2': 2}
    {'k3': 3}
    • 解决方法2:改用dumpsloads对每一行分别进行处理
    import json
    
    lst = [{"k1": 1}, {"k2": 2}, {"k3": 3}]
    with open("text.txt", "w+", encoding="utf-8") as f:
      for el in lst:
          f.write(json.dumps(el)+"\n")  # 利用write和dumps一行一行序列化写入
      f.seek(0)
      for line in f:
          print(json.loads(line))  # 一行一行读取反序列化
    
    运行结果:
    {'k1': 1}
    {'k2': 2}
    {'k3': 3}

2.pickle模块

  • pickle模块将所有数据类型和对象序列化转换成bytes类型(不支持lambda匿名函数),还可以反序列化还原回原数据,pickle模块只能在python语言中使用,其他语言不识别

  • pickle模块支持多行序列化写入和多行读取反序列化功能

  • pickle模块方法介绍:

    pickle.dumps() 将对象序列化
    pickle.loads() 将对象反序列化
    pickle.dump() 将对象序列化写入文件
    pickle.load() 将对象读取后反序列化
    • dumps、loads用于网络传输
    • dump、load用于文件写读
    • pickle的方法和json完全相同,与json的区别就是pickle序列化后是字节,而json序列化后是字符串

3.shelve模块(了解)

  • 了解一下就好,这里不做介绍

(二)hashlib模块

  1. hashlib模块被人称为加密算法、摘要算法等,它的功能是用来对数据进行加密文件校验使用,通过模块中的功能函数将数据转

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇tensor flow 线性回归 下一篇零基础学python,制作全网Vip视频..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目