python-json&pickle模块

一、json模块

  1、概念

    json是一种通用的数据交换格式。将python的数据类型转换为符合json规范的数据格式后,其它语言也能正常解析(序列化)。

    或者将符合json规范的数据转换为python数据类型(反序列化)。

    json起到了桥梁作用。

  2、json.dumps方法

    2.1、语法

json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8", default=None, sort_keys=False, **kw)

    将 Python 对象编码成 JSON 字符串

    2.2、实例

    

import json

py_dic = {'name' : 'dongzuo'}
f = open('json.txt','w')
json_dic = json.dumps(py_dic)   # 将数据内部的所有的单引号转换为双引号,然后在整个数据外加上单引号  {'name' : 'dongzuo'}  -->'{"name": "dongzuo"}'
f.write(json_dic) 
f.close()

  查看json.txt文件

{"name": "dongzuo"}

  3、json.dump方法

    3.1、json.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)

    将 Python 对象编码成 JSON 字符串

    3.2、实例

    

import json

py_dic = {'name': 'dongzuo'}
f = open('json.txt', 'w')
json.dump(py_dic,f)
f.close()

    查看json.txt

{"name": "dongzuo"}

 

    3.3、dumps和dump的区别

      dumps需要write方法写入

      dump不需要write方法

 

   4、loads方法

    4.1、语法

      json.loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None,parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

      将已编码的 JSON 字符串解码为 Python 对象

     4.2、实例

    存在文件json.txt,文件内容如下

    

{"name": "dongzuo"}

 

     执行代码

import json

f = open('json.txt', 'r')
data_str = f.read() # 将文件中的字符串读取(文件中的数据都是以字符串形式存在的,只不过我们看到它符合了字典的格式)
data = json.loads(data_str)
f.close()
print(data_str)
print(type(data_str))
print(data)
print(type(data))

 

     输出结果

{"name": "dongzuo"}
<class 'str'>
{'name': 'dongzuo'}
<class 'dict'>

 

    5、json.load方法

      5.1、语法

       json.load(fp, *, cls=None, object_hook=None, parse_float=None,parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

        将已编码的 JSON 字符串解码为 Python 对象

      5.2、实例

      存在文件json.txt,内容如下

    

{"name": "dongzuo"}

      执行代码

import json

f = open('json.txt', 'r')
data = json.load(f)     # 相当于json.loads(f.read()
f.close()
print(data)
print(type(data))

      输出

{'name': 'dongzuo'}
<class 'dict'>

 

    

    6、loads和load区别

     loads()传的是字符串,而load()传的是文件对象

    使用loads()时需要先读文件再使用,而load()则不用

 

 

二、pickle模块

  1、概述

    pickle于json功能一样,只不pickle应用范围比较广泛,可以是python的函数、类,但是实际转换的也是内存地址

    json:用于字符串和Python数据类型间进行转换
    pickle: 用于python特有的类型和python的数据类型间进行转换
    json提供四个功能:dumps,dump,loads,load
    pickle提供四个功能:dumps,dump,loads,load

   2、pick.dumps方法

    2.1、语法

      pick.dumps(*args, **kwargs)

    2.2、实例

 

import pickle

py_dic = {'name':'zhangsan','age':13}
f = open('pickle.txt','wb') # 必须是使用b模式打开
pick_dic = pickle.dumps(py_dic) # 将字典转换为字节(只有python认识的字符串),所以我们直接用打开文件查看时,是乱码
f.write(pick_dic)
f.close()
print(pick_dic)

      输出如下

b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x08\x00\x00\x00zhangsanq\x02X\x03\x00\x00\x00ageq\x03K\ru.'

 

  

   3、pickle.loads方法

      3.1、语法

        pickle.loads(*args, **kwargs)

        

      3.2、实例

      

import pickle

f = open('pickle.txt','rb')
data_b = f.read()
data_py = pickle.loads(data_b)
f.close()
print(data_b)
print(type(data_b))
print(data_py)
print(type(data_py))

        输出

b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x08\x00\x00\x00zhangsanq\x02X\x03\x00\x00\x00ageq\x03K\ru.'
<class 'bytes'>
{'name': 'zhangsan', 'age': 13}
<class 'dict'>

 

 

 

posted on 2019-11-11 11:30  别动我的锅  阅读(114)  评论(0)    收藏  举报

导航

levels of contents