
La funzione bytearray() di Python
Nel linguaggio Python la funzione bytearray() è una funzione integrata che crea una sequenza di byte modificabili.
bytearray()
I byte sono simili a stringhe di caratteri, ma sono utilizzati per rappresentare dati binari piuttosto che testo.
Questi array sono mutabili, il che significa che puoi modificarli dopo la loro creazione, a differenza delle stringhe di byte (bytes), che sono immutabili.
A cosa serve? I bytearray sono particolarmente utili quando devi lavorare con dati binari per la lettura o la scrittura di file, comunicazioni di rete, o per qualsiasi altra operazione che richieda una rappresentazione binaria modificabile dei dati. È un tipo di dato molto versatile per gestire dati binari, ad esempio per manipolare file o comunicazioni di rete a basso livello.
La creazione di un bytearray
Puoi creare un bytearray vuoto, da una stringa, da un iterabile di interi, o da un oggetto di tipo bytes.
Ad esempio, per creare un bytearray vuoto puoi digitare la funzione senza indicare alcun parametro.
ba=bytearray()
Una volta generata l'oggetto, puoi aggiungere un elemento con il metodo extend()
ba.extend(b'hello')
Dove la 'b' prima della stringa indica che si tratta di una stringa di byte.
Se stampi il contenuto dell'oggetto, Python ti restituisce un oggetto di tipo bytearray
print(ba)
bytearray(b'hello')
Come puoi notare, l'oggetto non è una stringa ma un bytearray.
Questo vuol dire che ogni elemento è un numero compreso tra 0 e 255. Non è un carattere.
In alternativa, puoi definire un bytearray indicando subito tra le parentesi tonde gli elementi che contiene, senza utilizzare il metodo extend. Ad esempio.
ba=bytearray(b'hello')
Il risultato finale è lo stesso.
print(ba)
bytearray(b'hello')
Puoi accedere a ogni singolo elemento del bytearray tramite lo slicing e l'indicizzazione.
Se accedi al primo carattere della stringa, Python ti restituisce un numero intero (int) anziché il carattere.
print(ba[0])
104
Questo accade perché i dati sono memorizzati come byte, ossia in forma numerica, e non come caratteri.
In questo caso 104 è il codice Unicode/Ascii del carattere 'h', la prima lettera della stringa 'hello'.
print(chr(104))
h
Se stampi il contenuto del bytearray un elemento alla volta, il risultato è una sequenza di numeri compresi tra 0 e 255.
- for i in ba:
- print(i)
104
101
108
108
111
Dove 104 è il codice di 'h', 101 è il codice di 'e', 108 è il codice di 'l' e 111 è il codice di 'o'.
Puoi anche definire un bytearray utilizzando un oggetto iterabili di interi (da 0 a 255).
Ad esempio, puoi assegnare la stringa di byte b'hello' indicando i singoli codici delle lettere all'interno di una lista.
ba = bytearray([104, 101, 108, 108, 111])
Il risultato finale è sempre lo stesso.
print(ba)
bytearray(b'hello')
Se vuoi puoi anche definire un bytearray a partire da una stringa ma in questo caso è necessario indicare anche l'encoding.
Ad esempio, l'encoding UTF-8.
ba = bytearray('hello', 'UTF-8')
Anche in questo caso il risultato finale è sempre lo stesso.
Le operazioni sui bytearray
Puoi eseguire diverse operazioni su un bytearray, come l'aggiunta, la rimozione, o la modifica di elementi, e queste operazioni sono simili a quelle che faresti su una lista.
In generale, i bytearray hanno tutti i metodi delle stringhe di byte e delle sequenze mutabili (es. append, insert, remove, pop, replace, ecc.).
Ad esempio, definisci questo oggetto bytearray sul quale faremo qualche esperimento.
ba=bytearray(b'hello')
1] Aggiungere elementi al byearray
Puoi aggiungere un nuovo elemento in coda a quello esistente usando il metodo extend()
ba.extend(b'World')
La nuova stringa di byte viene aggiunta in coda a quella esistente.
print(ba)
bytearray(b'helloWorld')
Per aggiungere un singolo elemento puoi anche utilizzare il metodo append().
ba.append(33)
Dove 33 è il codice unicode del punto esclamativo '!'
Ora il bytearray ha un elemento in più.
print(ba)
bytearray(b'helloWorld!')
2] Modificare gli elementi del byearray
Puoi anche modificare un singolo elemento del bytearray.
Ad esempio, per modificare la lettera 'h' in 'H' maiuscola puoi digitare:
ba[0] = ord('H')
Se ora stampi il contenuto dell'oggetto, Python ti restituisce il bytearray con la modifica che hai applicato.
print(ba)
bytearray(b'HelloWorld!')
3] Rimuovere un elemento da byearray
Per rimuovere elementi, puoi usare i metodi remove() o pop().
Il metodo remove() rimuove il primo elemento corrispondente al valore specificato, mentre pop() rimuove un elemento all'indice specificato o l'ultimo, se non specificato.
Ad esempio, remove(33) rimuove il primo byte con valore uguale a 33.
ba.remove(33)
In questo caso elimina il punto esclamativo.
print(ba)
bytearray(b'HelloWorld')
Viceversa, pop(0) rimuove il primo byte, quello che si trova nella posizione 0 dell'indice.
ba.pop(0)
In questo caso elimina la lettera 'h'
print(ba)
bytearray(b'elloWorld')
4] Inserire un elemento
Se vuoi inserire un nuovo elemento in una posizione specifica del bytearray, puoi usare il metodo insert()
ba.insert(0,104)
In questo caso il metodo aggiunge il valore '104' ossia la lettera 'h' nella posizione 0 dell'indice.
Quindi, il risultato finale è di nuovo b'helloWorld'.
print(ba)
bytearray(b'helloWorld')
4] La concatenazione
Puoi concatenare due bytearray tra loro usando l'operatore +.
ba1 = bytearray(b'hello')
ba2 = bytearray(b'World')
ba=ba1+ba2
Il risultato finale è un altro oggetto di tipo bytearray.
print(ba)
bytearray(b'helloWorld')
Se invece concateni un oggetto bytearray con un oggetto byte, il risultato è il tipo di dato del primo operando.
Ad esempio, in questo caso il risultato è un altro bytearray perché il primo valore è un bytearray bytearray(b'hello')
ba1 = bytearray(b'hello')
byte2 =b'World'
ba=ba1+byte2
print(ba)
bytearray(b'helloWorld')
In quest'altro caso, invece, il risultato è un oggetto byte perché il primo operando è un oggetto byte b'hello'
byte1 = b'hello'
ba2=bytearray(b'World')
ba=byte1+ba2
print(ba)
b'helloWorld'
Queste sono le principali operazioni di base che puoi eseguire con bytearray in Python.