常用模块 json 与 pickle的 使用

json  模块

import json
from datetime import datetime

json.dumps 与 json.dump 可以将常见的数据类型转变为字符串数据

1)、对于datetime类型的数据,需要作出一些修改

data = datetime.now()

需要重写json里的一个类:
class ComplexEncoder(json.JSONEncoder):
    def default(self, o):
        if isinstance(o,datetime):
            return o.strftime(‘%Y-%m-%d %H:%M:%S‘)
        else:
            return json.JSONEncoder.default(self,o)

with open(‘json序列化‘,‘w‘,encoding=‘utf-8‘) as f:
    f.write(json.dumps(data,cls=ComplexEncoder)+‘\n‘)

2)、对于中文在序列化时,默认会将其装换为unicode,若有需要,可以将其保留为中文字符串

a = ‘michale想在上海买套房‘

with open(‘json序列化‘,‘w‘,encoding=‘utf-8‘) as f:
    json.dump(a,f,ensure_ascii=False)
        f.write(‘\n‘)

由上可知:json.dumps()直接操作常规数据,利用write()函数将数据写入 文件里。而json.dump()直接在里面添加两个参数就可以将数据写入文件。
即:前者操作字符串写入,后者直接文件打交道。

对于json.load和json.loads而言,二者只能将字符串类型的字典给转换出来,如果文件里出现了其他类型的数据,就直接报错!
pickle 模块

pickle模块可将任意类型的数据转换为字节类型的数据存入到文件中。
当然也可以直接将这些直接类型的数据取出还原为之前的类型。

import pickle
li = [1,2,3,4,5,6,‘qwe‘,‘妹子‘]

data = pickle.dumps(li)
print(data)
#b‘\x80\x03]q\x00(K\x01K\x02K\x03K\x04K\x05K\x06X\x03\x00\x00\x00qweq\x01X\x06\x00\x00\x00\xe5\xa6\xb9\xe5\xad\x90q\x02e.‘
data1 = pickle.loads(data)
print(data1,type(data1))
# [1, 2, 3, 4, 5, 6, ‘qwe‘, ‘妹子‘] <class ‘list‘>

# 文件操作
# with open(‘pickle序列化‘,‘wb‘) as f:
#     # pickle.dump(li,f)
#     f.write(pickle.dumps(li))

with open(‘pickle序列化‘,‘rb‘) as f:
    # res = pickle.load(f)
    # print(res,type(res)) #[1, 2, 3, 4, 5, 6, ‘qwe‘, ‘妹子‘]  <class ‘list‘>
    res = f.read()
    data2 = pickle.loads(res)
    print(data2)

因为pickle模块时python独有的,虽然可以序列化任意类型的数据,但是在
文件里查看存入的数据时,会显示乱码。且不同的python版本之间可能会乱码。
json 与  pickle 的总结:

pickle序列化的对象为bytes对象,json序列化为str,当然也可以转码为字节类型;
pickle的序列化结果不通用,json序列化的结果通用!

原文地址:https://www.cnblogs.com/changwenjun-666/p/11461256.html

时间: 2024-11-05 17:29:26

常用模块 json 与 pickle的 使用的相关文章

python常用模块——json、pickle、shelve

常用模块 json pickle shelve json模块和pickle模块很像,方法都一样:json在js.python.java等等中通用,而pickle是python里的. 一. json模块 json模块只需要掌握 dumps和loads即可:另外两个用到时再补充吧: 1. dump() 格式如下: dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=N

day5 常用模块json和pickle

json 和 pickle json和pickle是用于字符串序列化和反序列化的过程,我们在存储和使用的时候,经常把列表存入文件,读取的时候我们还想以列表的形式读取.就需要使用json和pickle.json是支持所有的接口,pickle是python自己内置的接口. 用于序列化的两个模块 (1)json,用于字符串和python数据类型间进行转换 (2)pickle,用于python特有的类型和python的数据类型间进行转换 Json模块提供了四个功能:dumps.dump.loads.lo

常用模块(json/pickle/shelve/XML)

一.json模块(重点) 一种跨平台的数据格式 也属于序列化的一种方式 介绍模块之前,三个问题: 序列化是什么? 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化. 反序列化又是什么? 将硬盘上存储的中间格式数据在还原为内存中的数据结构 为什么要序列化? 1.持久保持状态 2.跨平台数据的交互 JSON是什么? java script object notation 就是对象表示法 var obj = {"name":"egon"} 对于我们开发而言 j

序列化的两个模块(json和pickle)

到底什么是序列化(picking)呢? 我们把变量从内存中变成可存储或传输的过程称之为序列化 序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上. 反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling json和pickle json和pickle模块,两个都是用于序列化的模块 json #json 是通用的,可以在各种语言里进行交互,只是一个简单的序列化方法#json把python对象转化成字符串,仅限于简单的数据类型,例如列表,字典,元组

python序列化模块json和pickle

序列化相关 1. json 应用场景: json模块主要用于处理json格式的数据,可以将json格式的数据转化为python的字典,便于python处理,同时也可以将python的字典或列表等对象转化为json格式的数据,便于跨平台或跨语言进行数据交互 功能: Json模块提供了四个功能:dumps.dump.loads.load Python 编码为 JSON 类型转换对应表: Python JSON dict object list, tuple array str string int,

Python常用模块——json,pickle模块

什么是序列化? 序列化是指把内存里的数据类型转变成字符串,使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接收bytes. 为什么要序列化? 我们编写的程序,会涉及到各种各样的对象.数据结构,它们通常是以变量的形式在内存中存在着.当程序运行结束后,这些变量也就会被清理.但我们有时希望能够在下一次编写程序时恢复上一次的某个对象(如机器学习中的到结果,需要程序运行较长时间,多次运行时间成本太大),这就需要我们将变量进行持久化的存储.一种方式是利用文件读写的方式将变量转化为某种形式的字符

logging模块,序列化,random模块,json和pickle

1.logging logging模块用来记录软件的各种状态.,开发人员可以通过日志的内容对程序进行修改. import logging logging.debug('debug message') logging.info('info message') logging.warning('warning message') logging.error('error message') logging.critical('critical message') 默认情况下logging打印到标准输

Python—序列化和反序列化模块(json、pickle和shelve)

什么是序列化 我们把对象(或者变量)从内存中变为可存储或者可传输的过程称为序列化.在python中为pickling,在其他语言中也被称之为serialization,marshalling,flattening等等.即序列化之后就可以将内存中的程序内容写入硬盘或者通过网络传输到其他机器上去.反序列化的过程则相反:将硬盘中的内容变为可以在内存中运行的程序的过程称为反序列化. Json模块 # encoding:utf-8 # 通过序列化和反序列化将内容存储到文件 import json json

shutil模块、json和pickle模块

shutil模块: 高级的文件.文件夹.压缩包处理模块 json和pickle模块 之前学过eval内置方法可以将一个字符串转化成Python对象,但eval方法是有局限性的,对于普通的数据类型,json.loads.eval都可以使用,但遇到特殊类型的时候,eval就不能使用了, 所以eval的重点通常还是用来执行一个字符串表达式,并返回表达式的值. 序列化:我们把对象从内存中变成可存蓄或可传送的过程称为序列化,在Python中叫picking,在其他语言中叫serialization .ma