bytes() și bytearray() în Python

Bytes Python 3.0+

Secvențe de octeți (valori 0-255) pentru date binare: fișiere, rețea, text codificat.

Sintaxă
b"text ASCII"
bytes(iterabil_de_int) / bytes(text, encoding) / bytes(n)
bytearray(...)

Ce face bytes() și bytearray()

bytes este o secvență imutabilă de octeți. Se scrie cu prefixul b: b"abc", unde caracterele non-ASCII se dau ca \x... Un element accesat prin index este un număr întreg (b"A"[0] este 65).

bytes() se construiește dintr-o listă de numere, dintr-un text plus codificare, sau ca n octeți zero. bytearray are aceleași forme, dar este modificabil: poți schimba octeți, adăuga (append, extend) sau șterge.

bytes are aproape toate metodele lui str (split, replace, startswith…), care lucrează pe octeți. Fișierele deschise cu modul 'rb' returnează bytes.

Parametri

Parametru Descriere
iterabil / text, encoding / n Numerele octeților, un text cu codificarea lui, sau numărul de octeți zero.

Ce returnează

Un obiect bytes (imutabil) sau bytearray (modificabil).

Exemple

Exemplul 1: Moduri de a crea bytes

print(b"ABC", b"ABC"[0], list(b"ABC"))
print(bytes([72, 105]))
print(bytes("Iași", "utf-8"))
print(bytes(3))

Rezultat

b'ABC' 65 [65, 66, 67]
b'Hi'
b'Ia\xc8\x99i'
b'\x00\x00\x00'

Exemplul 2: bytearray modificabil

date = bytearray(b"salut")
date[0] = ord("S")
date.extend(b"!")
print(date, bytes(date))
try:
    b"salut"[0] = 83
except TypeError as e:
    print("bytes:", e)

Rezultat

bytearray(b'Salut!') b'Salut!'
bytes: 'bytes' object does not support item assignment

Exemplul 3: Citirea unui fișier binar

with open("date.bin", "wb") as f:
    f.write(bytes([0x89, 0x50, 0x4E, 0x47]))
with open("date.bin", "rb") as f:
    antet = f.read()
print(antet, antet[1:] == b"PNG")

Rezultat

b'\x89PNG' True

Greșeli frecvente

  • Amesteci str și bytes: b"a" + "b" dă TypeError: can't concat str to bytes. Codifică textul sau decodifică octeții.
  • Scrii diacritice direct într-un literal bytes: b"ș" dă SyntaxError. Folosește "ș".encode().

Comenzi înrudite