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 d'E/S 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 démontrer de nombreux exemples ici pour prouver notre point. Commençons.
BytesIO de 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 exemple pour démontrer cela :
import io
stream_str = io.BytesIO(b"JournalDev Python: \x00\x01")
print(stream_str.getvalue())
Voyons le résultat de ce programme :
La fonction getvalue() prend simplement la valeur du tampon en tant que chaîne.
Python StringIO
Nous pouvons même utiliser StringIO, qui est extrêmement similaire en utilisation à BytesIO. Voici un exemple de programme :
import io
data = io.StringIO()
data.write('JournalDev: ')
print('Python.', file=data)
print(data.getvalue())
data.close()
Voyons le résultat de ce programme :
Notez que nous avons même fermé le tampon après avoir terminé avec le tampon. Cela aide à économiser de la mémoire tampon car ils stockent des données en mémoire. De plus, nous avons utilisé la méthode d'impression avec un argument optionnel pour spécifier un flux d'E/S de la variable, ce qui est parfaitement compatible avec une instruction d'impression.
Lecture avec StringIO
Une fois que nous avons écrit des données dans le tampon StringIO, nous pouvons aussi les lire. Regardons un extrait de code :
import io
input = io.StringIO('This goes into the read buffer.')
print(input.read())
Voyons le résultat de ce programme :
Lecture de fichier en utilisant StringIO
Il est également possible de lire un fichier et de le diffuser sur un réseau sous forme de bytes. Le module io peut être utilisé pour convertir un fichier média comme une image en bytes. Voici un programme d'exemple :
import io
file = io.open("whale.png", "rb", buffering = 0)
print(file.read())
Voyons le résultat de ce programme :
Pour que ce programme fonctionne, nous avions une image whale.png présente dans notre répertoire actuel.
io.open() contre os.open()
La fonction io.open() est une méthode de préférence pour effectuer des opérations d'E/S car elle est conçue comme une interface de haut niveau pour réaliser des opérations de fichiers. Elle encapsule le descripteur de fichier de niveau 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 des appels système POSIX de bas niveau. Elle prend en entrée des arguments basés sur POSIX et retourne un descripteur de fichier qui représente le fichier ouvert. Elle ne retourne pas un objet de fichier ; la valeur retournée n'a pas de fonctions read() ou write(). Dans l'ensemble, la fonction io.open() est juste un wrapper autour de la fonction os.open(). La fonction os.open() définit également des configurations par défaut comme les drapeaux et le mode, tandis que io.open() ne le fait pas et dépend des valeurs qui lui sont passées.
Conclusion
Dans cette leçon, nous avons étudié les opérations simples du module IO de Python et comment nous pouvons gérer les caractères Unicode avec BytesIO également. Cependant, si vous cherchez des opérations de fichiers complètes telles que supprimer et copier un fichier, alors lisez le fichier Python. Référence : Document API




