python3中字節與字符串
python3中只有一種數據類型可以保存文本信息,就是str(字符串),是不可變序列,保存的是unicode碼位。在python3中,用bytes對象來處理字節字符串。
bytes和可變的bytearray與str不同,只能用字節作為序列值,即0~256之間的整數表示。
print(bytes([101,100,99]))
b'edc'
list(b'hello')
[104, 101, 108, 108, 111]
list(b'he llo')
[104, 101, 32, 32, 32, 108, 108, 111]#空格的序列值是32
從python3.0開始,所有沒有前綴的字符串都是unicode。字節字符串要加前綴b
unicode字符串是不可以用字節表示的文本,而將數據保存到文本或者通過網絡發送必須是二進制數據,所以必須將字符串對象編碼為字節序列
字符串轉字節序列:
1. str.encode(encoding,errors)方法,encoding為編解碼器,默認值為'utf-8'
'hello'.encode()
b'hello'
-
bytes(source,encoding,errors)構造函數,創建一個新的字節序列,source為字符串,encoding為編解碼器,必須指定encoding,沒有默認值
bytes('hello',encoding='utf-8')
b'hello'
bytes('hello','utf-8')
b'hello'
將bytes表示的二進制數據轉成字符串 -
bytes.decode(encoding,errors)方法,encoding必須與str.encode里的encoding相同
b'hello'.decode()
'hello' -
str(source,encoding,error)構造函數與bytes()構造函數相似,source是字節序列,必須指定str函數的參數encoding,它沒有默認值
str(b'hello','utf-8')
'hello'
python字符串是不可變的,bytes字節序列也是不可變的,有優點有缺點,優點是由於不變性,字符串可以做字典的鍵或set的元素,因為一旦初始化字符串的值就不會改變。缺點是當要修改字符串時,都需要創建一個全新的字符串實例。bytearray時bytes可變版本,字節數組可以通過append,pop,insert等方法添加修改刪除字節序列
處理字符串拼接
-
使用+=方法
s="" for sub in subs: s+=sub
-
使用join方法
s="".join(subs)
字符串的格式化方法str.format或%