Python json和pickle模块

内存和硬盘使用编码

内存使用unicode编码,硬盘使用utf-8编码
转载于:https://www.liaoxuefeng.com/wiki/1016959663602400/1017075323632896

string和bytes

在Python3以后,字符串和bytes类型彻底分开了。字符串是以字符为单位进行处理的,bytes类型是以字节为单位处理的。
bytes对象只负责以二进制字节序列的形式记录所需记录的对象,至于该对象到底表示什么(比如到底是什么字符)则由相应的编码格式解码所决定。值形式为 b’xxxxx’,其中 ‘xxxxx’ 为一至多个转义的十六进制字符串(单个 x 的形式为:\x12,其中\x为小写的十六进制转义字符,12为二位十六进制数)组成的序列,每个十六进制数代表一个字节(八位二进制数,取值范围0-255),对于同一个字符串如果采用不同的编码方式生成bytes对象,就会形成不同的值.
转载于:https://www.liujiangblog.com/course/python/23

>>> b=b'abc' #创建一个bytes类型数据

>>> s=b.decode() #将bytes类型解码成字符串,默认解码方式是utf-8
>>> print(s)
abc
>>> b=s.encode() #将字符串编码成字节bytes,默认编码方式是utf-8
>>> print(b)
b'abc'

json

json是一种用于数据交换的文本格式,比如python和java交换数据,不能直接将python的列表或者字典等数据类型传过去,java肯定不认识。需要将python的数据类型(列表、字典、字符串等)转换成json字符串,再传输给java。
json的四种方法:

方法功能
json.loads(str)将json字符串转换成python类型
json.load(file)将json文件读出转成python类型
json.dumps(obj)将python类型转成json字符串
json.dump(obj,file)将Python类型转成json字符串并写入文件

socket传输,文件保存的都是bytes类型
python的bytes类型不能转换成json,需要先解码decode成str,再转换成json

>>> b=b'abc'
>>> import json
>>> json.dumps(b)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\Python311\Lib\json\__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\Python311\Lib\json\encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\Python311\Lib\json\encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "D:\Python311\Lib\json\encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type bytes is not JSON serializable
>>> s=str(b)
>>> print(s)
b'abc'
>>> s=b.decode()
>>> print(s)
abc
>>> j=json.dumps(s)
>>> print(j)
"abc"

pickle

pickle用于将python数据类型,除了内置类型,还包括自定义类,转换成pickle bytes类型,方法和json类似

方法功能
pickle.loads(bytes)将pickle bytes类型转换成python类型
pickle.load(file)将pickle bytes文件读出并转成python类型
pickle.dumps(obj)将python类型转成pickle bytes类型
pickle.dump(obj,file)将Python类型转成pickle bytes类型并写入文件
import pickle

'''
dumps和loads
'''
a1 = pickle.dumps('abc') #将python str转成pickle字节
print(a1)
a2 = pickle.dumps(b'abc') #将python bytes转成pickle bytes
print(a2)

try:
    b1 = pickle.loads(b'abc')
    print(b1)
except Exception as e:
    print('error:',e)
    print(type(e))
#报错,loads的内容需要是pickle bytes,不是python bytes

b1 = pickle.loads(a1) #将pickle字节转成python str
print(b1)
b2 = pickle.loads(a2) #将pickle字节转成python字节
print(b2)

class Person():
    def __init__(self):
        pass
person = Person()
b = pickle.dumps(person)
print(b)
p = pickle.loads(b)
print(p)

'''
pickle.dump与pickle.load
'''
file = open('p_test.txt','wb')
pickle.dump('abc',file) #将python str转成pickle bytes,并写入文件
file.close()

file = open('p_test.txt','rb+')
r = pickle.load(file) #将pickle文件转成python str,并写入文件
print(r)
file.close()

file = open('p_test.txt','wb+')
pickle.dump(b'abc',file) #将python bytes转成pickle bytes,并写入文件
file.close()

file = open('p_test.txt','rb+')
r = pickle.load(file) #将pickle文件转成python bytes,并写入文件
print(r)
file.close()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值