一:json模块
json模块的作用就是讲json字符串("{"a":1,"b":1}")和python能够识别的字典进行相互转换。
import json
import pickle
a = """
{'a'::1,
'c':2}
"""
ret = json.loads(a)
print(ret)
# 结果
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 2 column 2 (char 2)
a不是标准的json字符串,标准的字符串必须使用双引号进行包裹,这点非常重要。
a = """
{"a":1,
"c":2}
"""
ret = json.loads(a)
print(ret)
print(ret["a"])
# 结果
{'a': 1, 'c': 2}
1
结论:loads: josn字符串---->和python字典之间的转换
import json
import pickle
a = {'a':1,'b':2}
ret = json.dumps(a) # 将pyhton字典转换为josn字符串,这种情况下对于引号的限制没有那么严格
print(ret)
print(type(ret))
{"a": 1, "b": 2}
<class 'str'>
二:picke模块:将字节和python对象之间进行转换
import pickle
a = {'a':1,'b':2}
b = "哈哈"
c = 1
d = [1,2,3]
ret1 = pickle.dumps(a)
print(ret1)
# b'\x80\x03}q\x00(X\x01\x00\x00\x00aq\x01K\x01X\x01\x00\x00\x00bq\x02K\x02u.'
ret2 = pickle.dumps(b)
print(ret2)
# b'\x80\x03X\x06\x00\x00\x00\xe5\x93\x88\xe5\x93\x88q\x00.'
ret3 = pickle.dumps(c)
print(ret3)
# b'\x80\x03K\x01.'
ret4 = pickle.dumps(d)
print(ret4)
# b'\x80\x03]q\x00(K\x01K\x02K\x03e.'
with open("demo.txt","wb") as f:
f.write(ret1)这种情况,就要看ret1的编码格式是什么,python中提供了chardet模块来检查编码格式import chardetprint(chardet.detect(ret1))# 结果{'encoding': 'Windows-1252', 'confidence': 0.73, 'language': ''}
import pickle
import chardet
a = {'a':1,'b':2}
d = [1,2,3]
f = open("test.txt","wb")
pickle.dump(d,f) # 不同于dumps返回一个二进制的结果,dump直接将文件写入指定位置
f.close()
import pickle
import chardet
a = {'a':1,'b':2}
d = [1,2,3]
ret = pickle.dumps(d)
print(ret)
# b'\x80\x03]q\x00(K\x01K\x02K\x03e.'
ret1 = pickle.loads(ret) # pickle必须接收的是picke自己dumps的二进制类型文件
print(ret1)
# [1, 2, 3]
import pickle
import chardet
a = "1"
ret = a.encode("utf-8")
print(ret)
ret1 = pickle.loads(ret) # loads的数据,必须是dumps自己处理过的类型才行
print(ret1)
# 结果
_pickle.UnpicklingError: could not find MARK
import pickle
import chardet
a = "1"
ret = a.encode("Windows-1252")
print(ret)
ret1 = pickle.loads(ret)
print(ret1)
# 结果
_pickle.UnpicklingError: could not find MARK
laod方法
import pickle
import chardet
with open("demo.txt","rb") as f:
ret = pickle.load(f)
print(ret)
# 结果
{'a': 1, 'b': 2}