内存和硬盘使用编码
内存使用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()