Module IO de Python : La référence pratique complète

Bonjour à tous ! Dans l’article d’aujourd’hui, nous allons nous intéresser à l’utilisation du module Python IO.

Ce module est assez utile lorsque vous souhaitez effectuer des opérations d’E/S liées à des fichiers (ex. lecture/écriture de fichiers)

Bien que vous puissiez utiliser les méthodes normales read() et write() pour lire/écrire dans un fichier, ce module nous donne beaucoup plus de flexibilité concernant ces opérations.

Pour mieux comprendre ce module, prenons quelques exemples.

Module Python IO

Ce module fait partie de la bibliothèque standard, il n’est donc pas nécessaire de l’installer séparément avec pip.

Pour importer le module io, nous pouvons faire ce qui suit :

import io

Dans le io module, il y a 2 classes communes qui nous sont très utiles :

  • BytesIO -> opérations d’E/S sur des données octets
  • StringIO ->> Opérations d’entrée/sortie sur des données de type chaîne de caractères

Nous pouvons accéder à ces classes en utilisant io.BytesIO et io.StringIO.

Regardons-les une par une.

Classe Python BytesIO

Ici, nous pouvons conserver nos données sous forme d’octets (b''). Lorsque nous utilisons io.BytesIO, les données sont conservées dans un tampon en mémoire.

Nous pouvons obtenir une instance au flux d’octets en utilisant le constructeur :

import iobytes_stream = io.BytesIO(b'Hello from Journaldev\x0AHow are you?')

Visualisez que nous passons une chaîne d’octets (préfixée en utilisant b).

Pour l’instant, bytes_stream est simplement un handle vers le flux d’octets.

Pour imprimer réellement les données à l’intérieur du tampon, nous devons utiliser bytes_stream.getvalue().

import iobytes_stream = io.BytesIO(b'Hello from Journaldev\x0AHow are you?')print(bytes_stream.getvalue())

Ici, getvalue() prend la valeur de la chaîne d’octets du handle.

Puisque la chaîne d’octets \x0A est la représentation ASCII de la nouvelle ligne (‘\n’), nous obtenons la sortie suivante :

Sortie

b'Hello from Journaldev\nHow are you?'

Maintenant, c’est toujours une bonne pratique de fermer notre handle de tampon lorsque nous avons terminé notre travail.

C’est aussi pour s’assurer que nous libérons toute la mémoire que nous avons allouée pour le tampon.

Pour fermer le tampon, utilisez :

bytes_stream.close()

Maintenant, regardons la classe StringIO.

Classe Python StringIO

Similaire à io.BytesIO, la classe io.StringIO peut lire les données relatives aux chaînes de caractères à partir d’un tampon StringIO.

import iostring_stream = io.StringIO("Hello from Journaldev\nHow are you?")

Nous pouvons lire à partir du tampon de chaîne de caractères en utilisant string_stream.read() et écrire en utilisant string_stream.write(). Ceci est très similaire à la lecture / écriture d’un fichier !

Nous pouvons imprimer le contenu en utilisant getvalue().

Sortie

Initially, buffer: Hello from JournaldevHow are you?Finally, buffer: This will overwrite the old content of the buffer if the length of this string exceeds the old content

Puisque nous écrivons dans le même tampon, le nouveau contenu écrasera évidemment l’ancien !

Lecture d’un tampon StringIO

Similairement à l’écriture, nous pouvons également lire un tampon StringIO en utilisant buffer.read().

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

Sortie

This goes into the read buffer.

Comme vous pouvez le voir, le contenu se trouve maintenant à l’intérieur du tampon de lecture, qui est imprimé en utilisant buffer.read().

Lecture d’un fichier à l’aide de io

Nous pouvons utiliser la méthode io.open() pour lire directement un fichier également, de manière similaire à la lecture d’un objet fichier.

Ici, ce module nous donne l’option de lecture tamponnée vs non tamponnée.

Par exemple, ce qui suit utilisera une lecture tamponnée pour lire un fichier, en définissant buffering = SIZE. Si SIZE = 0, cela impliquera l’absence de mise en mémoire tampon !

Supposons que sample.txt ait le contenu suivant :

Hello from JournalDev!How are you?This is the last line.

Sortie

b'Hello from JournalDev!\nHow are you?\nThis is the last line.\n'

Comme vous pouvez le constater, le fichier a été lu avec succès ! Ici, io lira le fichier en utilisant une taille de tampon d’environ 5 octets.

Utiliser io.open() vs os.open()

La fonction io.open() est une manière bien préférée d’effectuer des opérations d’E/S car elle est faite comme une interface Pythonique de haut niveau.

Au contraire, la fonction os.open() effectuera un appel système à la fonction open(). Celle-ci renverra un descripteur de fichier, qui ne pourra pas être utilisé comme l’objet handle io.

Puisque io.open() est une fonction wrapper de os.open(), c’est généralement une bonne pratique d’utiliser de telles fonctions wrapper, car elles gèrent automatiquement de nombreuses erreurs pour vous.

Conclusion

Dans cet article, nous avons appris à utiliser le module Python IO, et ses deux classes principales – io.BytesIO et io.StringIO pour lire et écrire des données d’octets et de chaînes sur un tampon.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *