Python io – BytesIO, StringIO

Le module io de Python nous permet de gérer les opérations d’entrée et de sortie liées aux fichiers. L’avantage d’utiliser le module IO est que les classes et fonctions disponibles nous permettent d’étendre la fonctionnalité pour permettre l’écriture de données Unicode.

Module IO Python

Il existe de nombreuses façons d’utiliser le module io pour effectuer des opérations de flux et de tampon en Python. Nous allons ici démontrer de nombreux exemples pour illustrer le point. Commençons.

BytesIO Python

Tout comme ce que nous faisons avec les variables, les données peuvent être conservées sous forme d’octets dans un tampon en mémoire lorsque nous utilisons les opérations Byte IO du module io. Voici un programme d’exemple pour le démontrer:

import io

stream_str = io.BytesIO(b"JournalDev Python: \x00\x01")
print(stream_str.getvalue())

Voyons la sortie de ce programme: La fonction getvalue() récupère simplement la valeur du tampon sous forme de chaîne de caractères.

StringIO Python

Nous pouvons même utiliser StringIO également, qui est extrêmement similaire à BytesIO. Voici un programme d’exemple:

import io

data = io.StringIO()
data.write('JournalDev: ')
print('Python.', file=data)

print(data.getvalue())

data.close()

Voyons la sortie pour ce programme: Remarquez que nous avons même fermé le tampon après avoir terminé avec le tampon. Cela aide à économiser la mémoire tampon car elles stockent des données en mémoire. De plus, nous avons utilisé la méthode print avec un argument facultatif pour spécifier un flux IO de la variable, ce qui est parfaitement compatible avec une instruction print.

Lecture en utilisant StringIO

Une fois que nous avons écrit des données dans le tampon StringIO, nous pouvons également les lire. Regardons un extrait de code:

import io

input = io.StringIO('This goes into the read buffer.')
print(input.read())

Voyons la sortie pour ce programme:

Lecture de fichier en utilisant StringIO

Il est également possible de lire un fichier et de le diffuser sur un réseau en tant qu’octets. Le module io peut être utilisé pour convertir un fichier multimédia comme une image en octets. Voici un programme exemple:

import io

file = io.open("whale.png", "rb", buffering = 0)
print(file.read())

Voyons la sortie pour ce programme: Pour que ce programme fonctionne, nous avions une image whale.png présente dans notre répertoire actuel.

io.open() vs os.open()

La fonction io.open() est une manière beaucoup plus préférée d’effectuer des opérations d’E/S car elle est conçue comme une interface de haut niveau pour effectuer des opérations d’E/S de fichier. Elle enveloppe le descripteur de fichier au niveau du système d’exploitation dans un objet que nous pouvons utiliser pour accéder au fichier de manière pythonique. La fonction os.open() s’occupe de l’appel système POSIX de plus bas niveau. Elle prend en compte les arguments basés sur POSIX et renvoie un descripteur de fichier qui représente le fichier ouvert. Elle ne renvoie pas un objet de fichier ; la valeur renvoyée n’aura pas de fonctions read() ou write(). Dans l’ensemble, la fonction io.open() est simplement un wrapper autour de la fonction os.open(). La fonction os.open() configure également les paramètres par défaut tels que les indicateurs et le mode, tandis que io.open() ne le fait pas et dépend des valeurs qui lui sont transmises.

Conclusion

Dans cette leçon, nous avons étudié les opérations simples du module d’E/S de Python et comment nous pouvons gérer les caractères Unicode avec BytesIO également. Cependant, si vous recherchez des opérations de fichier complètes telles que la suppression et la copie d’un fichier, alors lisez python lire fichier. Référence : Documentation de l’API.

Source:
https://www.digitalocean.com/community/tutorials/python-io-bytesio-stringio