首頁 > 軟體

Python中的bytes型別用法及範例分享

2022-03-01 10:00:23

前言;

Python bytes 型別用來表示一個位元組串。“位元組串“不是程式設計術語,是我自己“捏造”的一個詞,用來和字串相呼應。
bytes 是 Python 3.x 新增的型別,在 Python 2.x 中是不存在的。

位元組串(bytes)和字串(string)的對比:

  • 字串由若干個字元組成,以字元為單位進行操作;位元組串由若干個位元組組成,以位元組為單位進行操作。
  • 位元組串和字串除了操作的資料單元不同之外,它們支援的所有方法都基本相同。
  • 位元組串和字串都是不可變序列,不能隨意增加和刪除資料。

bytes 只負責以位元組序列的形式(二進位制形式)來儲存資料,至於這些資料到底表示什麼內容(字串、數位、圖片、音訊等),完全由程式的解析方式決定。如果採用合適的字元編碼方式(字元集),位元組串可以恢復成字串;反之亦然,字串也可以轉換成位元組串。

說白了,bytes 只是簡單地記錄記憶體中的原始資料,至於如何使用這些資料,bytes 並不在意,你想怎麼使用就怎麼使用,bytes 並不約束你的行為。

bytes 型別的資料非常適合在網際網路上傳輸,可以用於網路通訊程式設計;bytes 也可以用來儲存圖片、音訊、視訊等二進位制格式的檔案。

字串和 bytes 存在著千絲萬縷的聯絡,我們可以通過字串來建立 bytes 物件,或者說將字串轉換成 bytes 物件。

有以下三種方法可以達到這個目的:

  • 如果字串的內容都是 ASCII 字元,那麼直接在字串前面新增b字首就可以轉換成 bytes
  • bytes 是一個類,呼叫它的構造方法,也就是 bytes(),可以將字串按照指定的字元集轉換成 bytes;如果不指定字元集,那麼預設採用 UTF-8。
  • 字串本身有一個encode() 方法,該方法專門用來將字串按照指定的字元集轉換成對應的位元組串;如果不指定字元集,那麼預設採用 UTF-8。

1.bytes定義

例1:通過b'string'定義bytes型別,但不支援中文(出現中文則報錯)

例2:可以通過string.encoding('utf-8')將字串轉換成bytes型別(相容中文),還原通過bytes.decode('utf-8')

# coding:utf-8

if __name__ == '__main__':

    # 例1
    b = b'abc123'
    print(b)  # b'abc123'
    print(type(b))  # <class 'bytes'>
    # c = b'我abc123' Error

    # 例2
    c = '我abc123'
    c = c.encode('utf-8')
    print(c)  # b'xe6x88x91abc123'
    print(type(c))  # <class 'bytes'>
    print(c.decode('utf-8'))  # 我abc123

2.bytes方法

例1:string有的方法bytes大部分都有(但其字串引數必須是bytes型別)

# coding:utf-8

if __name__ == '__main__':


    b = b'abc123'
    print(b.find(b'a'))  # 0
    c = 'abc123'
    print(c.find('a'))  # 0
    # b.find('a') Error 引數必須是bytes
    print(b.replace(b'a', b'f'))  # b'fbc123'
    print(c.replace('a', 'f'))  # fbc123
    # b.replace('a', 'f') Error 引數必須是bytes

3.使用不同方式建立 bytes 物件

#通過建構函式建立空 bytes
b1 = bytes()
#通過空字串建立空 bytes
b2 = b''
#通過b字首將字串轉換成 bytes
b3 = b'http://c.biancheng.net/python/'
print("b3: ", b3)
print(b3[3])
print(b3[7:22])
#為 bytes() 方法指定字元集
b4 = bytes('C語言中文網8歲了', encoding='UTF-8')
print("b4: ", b4)
#通過 encode() 方法將字串轉換成 bytes
b5 = "C語言中文網8歲了".encode('UTF-8')
print("b5: ", b5)

執行結果:

b3:  b'http://c.biancheng.net/python/'
112
b'c.biancheng.net'
b4:  b'Cxe8xafxadxe8xa8x80xe4xb8xadxe6x96x87xe7xbdx918xe5xb2x81xe4xbax86'
b5:  b'Cxe8xafxadxe8xa8x80xe4xb8xadxe6x96x87xe7xbdx918xe5xb2x81xe4xbax86'

從執行結果可以發現,對於非 ASCII 字元,print 輸出的是它的字元編碼值(十六進位制形式),而不是字元本身。非 ASCII 字元一般佔用兩個位元組以上的記憶體,而 bytes 是按照單個位元組來處理資料的,所以不能一次處理多個位元組。

到此這篇關於Python中的bytes型別及其用法的文章就介紹到這了,更多相關Python中的bytes型別內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com