zoukankan      html  css  js  c++  java
  • json和pickle模块

    json和pickle模块

    json模块

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

    可以将python数据类型 ----》 json数据格式 ----》 字符串 ----》 文件中

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

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

    元组比较特殊:

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

    set是不能转换成json数据

    为什么要使用json:

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

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

      如何使用:
          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']
      list1 = ['张全蛋', '李小花']
      # dumps: 将python数据 ---》 json数据格式 ---》 字符串
      # ensure_ascii将默认的ascii取消设置为False,可以在控制台看到中文,否则看到的是bytes类型数据
      json_str = json.dumps(list1, ensure_ascii=False)
      print(json_str)
      print(type(json_str))  # str
      
      # json.loads()字符串 ----> json数据格式 ---》将python数据
      python_data = json.loads(json_str)
      print(python_data)
      print(type(python_data))  # list
      
      
      # 元组
      tuple1 = ('张全蛋', '李小花')
      # dumps: 将python数据 ---》 json数据格式 ---》 字符串
      # ensure_ascii将默认的ascii取消设置为False,可以在控制台看到中文,否则看到的是bytes类型数据
      json_str = json.dumps(tuple1, ensure_ascii=False)
      print(json_str)
      print(type(json_str))  # str
      
      # json.loads()字符串 ----> json数据格式 ---》将python数据
      python_data = json.loads(json_str)
      print(tuple(python_data))
      print(type(tuple(python_data)))  # list
      
      # 字典
      dic = {
          'name': 'tank',
          'age': 17
      }
      
      # dumps: 将python数据 ---》 json数据格式 ---》 字符串
      # ensure_ascii将默认的ascii取消设置为False,可以在控制台看到中文,否则看到的是bytes类型数据
      json_str = json.dumps(dic, ensure_ascii=False)
      print(json_str)
      print(type(json_str))  # str
      
      # json.loads()字符串 ----> json数据格式 ---》将python数据
      python_data = json.loads(json_str)
      print(python_data)
      print(type(python_data))  # dict
      
      
      # 注意: 集合是不能被序列化成json
      set1 = {
          1, 2, 3, 4, 5
      }
      
      # dumps: 将python数据 ---》 json数据格式 ---》 字符串
      # ensure_ascii将默认的ascii取消设置为False,可以在控制台看到中文,否则看到的是bytes类型数据
      json_str = json.dumps(set1, ensure_ascii=False)
      print(json_str)
      print(type(json_str))  # str
      
      # json.loads()字符串 ----> json数据格式 ---》将python数据
      python_data = json.loads(json_str)
      print(python_data)
      print(type(python_data))  # dict
      
      
      # 注册功能:
      def register():
          username = input('请输入用户名:').strip()
          password = input('请输入密码:').strip()
          re_password = input('请确认密码:').strip()
          if password == re_password:
              # [username, password]
              # {'name': username, 'pwd': 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()
      
      
      #dump, load
      import json
      user_dic = {
          'username': 'tank',
          'password': 123
      }
      f = open('user2.json', 'w', encoding='utf-8')
      json.dump(user_dic, f)
      f.close()
      
      with open('user3.json', 'w', encoding='utf-8') as f:
          json.dump(user_dic, f)
      
      with open('user3.json', 'r', encoding='utf-8') as f:
          user_dic = json.load(f)
          print(user_dic)
          print(type(user_dic))

      pickle模块

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

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

      缺点: (致命的缺点)

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

        import 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)
            print(type(python_set))
  • 相关阅读:
    Django视图
    Django模板系统
    错误:java.sql.SQLException: Access denied for user 'xxx'@'localhost' (using password: YES)
    关于Spring使用XML配置AOP时pointcut位置的一个小问题
    在jsp页面中将Java对象转换位JS对象的一个思路
    关于artifact XXXX:war exploded: Error during artifact deployment. See server log for details.错误
    框架集合——Java面向对象基础(33)
    使用Socket简单模拟C/S消息传递(UDP)——Java面向对象基础(32)
    使用Socket简单模拟C/S消息传递(TCP)——Java面向对象基础(31)
    对象序列化——Java面向对象基础(30)
  • 原文地址:https://www.cnblogs.com/lvguchujiu/p/11882165.html
Copyright © 2011-2022 走看看