python有两种表示字符的类型:
bytes:bytes的实例包含原始的8个字节
str:str的实例包含Unicode字符bytes
所以开发者不能以>和+等操作符来混合操作str和bytes实例
由于在实际开发中经常会涉及到上述两种字符的转换问题,所以我们需要编写两个辅助函数来使输入的数据能够符合开发者的预期。
# 接受str或bytes,并总是返回str的方法
def to_str(bytes_or_str):
if isinstance(bytes_or_str,bytes):
value = bytes_or_str.decode('utf-8')
else:
value = bytes_or_str
return value
# 接受str或bytes,并总是返回bytes的方法:
def to_bytes(bytes_or_str):
if isinstance(bytes_or_str,str):
value = bytes_or_str.encode('utf-8')
else:
value = bytes_or_str
return value
在python3中的str和bytes是不等价的,即使空值也不行。所以在传入字符序列时必须留意其类型。(在python2中,str和bytes可以用“+”操作符连接起来,貌似Unicode和str是同一类型)
从文件中读取二进制数据,或向其中写入二进制数据时,总应该以‘rb’和'wb'等二进制模式来开启文件。如下:
with open('/tmp/random.bin','wb') as f:
f.write(os.urandom(10))