Persistance des données Python - API de fichier

Python utilise des input() et print()fonctions pour effectuer des opérations d'entrée / sortie standard. La fonction input () lit les octets d'un périphérique de flux d'entrée standard, c'est-à-dire le clavier.

le print()d'autre part, envoie les données vers le périphérique de flux de sortie standard, c'est-à-dire le moniteur d'affichage. Le programme Python interagit avec ces périphériques IO via des objets de flux standardstdin et stdout défini dans le module sys.

le input()function est en fait un wrapper autour de la méthode readline () de l'objet sys.stdin. Toutes les frappes du flux d'entrée sont reçues jusqu'à ce que la touche «Entrée» soit enfoncée.

>>> import sys
>>> x=sys.stdin.readline()
Welcome to TutorialsPoint
>>> x
'Welcome to TutorialsPoint\n'

Notez que, readline()fonction laisse un caractère '\ n' à la fin. Il existe également une méthode read () qui lit les données du flux d'entrée standard jusqu'à ce qu'elles soient terminées parCtrl+D personnage.

>>> x=sys.stdin.read()
Hello
Welcome to TutorialsPoint
>>> x
'Hello\nWelcome to TutorialsPoint\n'

De même, print() est une fonction pratique émulant la méthode write () de l'objet stdout.

>>> x='Welcome to TutorialsPoint\n'
>>> sys.stdout.write(x)
Welcome to TutorialsPoint
26

Tout comme les objets de flux prédéfinis stdin et stdout, un programme Python peut lire et envoyer des données à un fichier disque ou à une socket réseau. Ce sont aussi des flux. Tout objet qui a la méthode read () est un flux d'entrée. Tout objet qui a la méthode write () est un flux de sortie. La communication avec le flux est établie en obtenant une référence à l'objet de flux avec la fonction open () intégrée.

fonction open ()

Cette fonction intégrée utilise les arguments suivants -

f=open(name, mode, buffering)

Le paramètre name est le nom du fichier disque ou une chaîne d'octets, le mode est une chaîne facultative à un caractère pour spécifier le type d'opération à effectuer (lecture, écriture, ajout, etc.) et le paramètre de mise en mémoire tampon est soit 0, 1 ou -1 indiquant la mise en mémoire tampon est désactivée, activée ou par défaut du système.

Le mode d'ouverture de fichier est énuméré selon le tableau ci-dessous. Le mode par défaut est «r»

Sr. Non Paramètres et description
1

R

Ouvrir pour lecture (par défaut)

2

W

Ouvrir pour l'écriture, tronquer d'abord le fichier

3

X

Créez un nouveau fichier et ouvrez-le pour l'écriture

4

A

Ouvert à l'écriture, en ajoutant à la fin du fichier s'il existe

5

B

Mode binaire

6

T

Mode texte (par défaut)

sept

+

Ouvrez un fichier disque pour la mise à jour (lecture et écriture)

Afin d'enregistrer des données dans un fichier, il doit être ouvert en mode «w».

f=open('test.txt','w')

Cet objet fichier agit comme un flux de sortie et a accès à la méthode write (). La méthode write () envoie une chaîne à cet objet et est stockée dans le fichier sous-jacent.

string="Hello TutorialsPoint\n"
f.write(string)

Il est important de fermer le flux pour s'assurer que toutes les données restantes dans la mémoire tampon y sont complètement transférées.

file.close()

Essayez d'ouvrir 'test.txt' en utilisant n'importe quel éditeur de test (tel que le bloc-notes) pour confirmer la création réussie du fichier.

Pour lire le contenu de «test.txt» par programme, il doit être ouvert en mode «r».

f=open('test.txt','r')

Cet objet se comporte comme un flux d'entrée. Python peut récupérer les données du flux en utilisantread() méthode.

string=f.read()
print (string)

Le contenu du fichier est affiché sur la console Python. L'objet File prend également en chargereadline() méthode qui est capable de lire la chaîne jusqu'à ce qu'elle rencontre le caractère EOF.

Cependant, si le même fichier est ouvert en mode «w» pour y stocker du texte supplémentaire, les contenus antérieurs sont effacés. Chaque fois qu'un fichier est ouvert avec l'autorisation d'écriture, il est traité comme s'il s'agissait d'un nouveau fichier. Pour ajouter des données à un fichier existant, utilisez «a» pour le mode d'ajout.

f=open('test.txt','a')
f.write('Python Tutorials\n')

Le fichier maintenant, a une chaîne plus ancienne et nouvellement ajoutée. L'objet fichier prend également en chargewritelines() pour écrire chaque chaîne d'un objet de liste dans le fichier.

f=open('test.txt','a')
lines=['Java Tutorials\n', 'DBMS tutorials\n', 'Mobile development tutorials\n']
f.writelines(lines)
f.close()

Exemple

le readlines()La méthode renvoie une liste de chaînes, chacune représentant une ligne du fichier. Il est également possible de lire le fichier ligne par ligne jusqu'à la fin du fichier.

f=open('test.txt','r')
while True:
   line=f.readline()
   if line=='' : break
   print (line, end='')
f.close()

Production

Hello TutorialsPoint
Python Tutorials
Java Tutorials
DBMS tutorials
Mobile development tutorials

Mode binaire

Par défaut, les opérations de lecture / écriture sur un objet fichier sont effectuées sur des données de chaîne de texte. Si nous voulons gérer des fichiers de différents autres types tels que les médias (mp3), les exécutables (exe), les images (jpg) etc., nous devons ajouter le préfixe «b» au mode lecture / écriture.

L'instruction suivante convertira une chaîne en octets et l'écrira dans un fichier.

f=open('test.bin', 'wb')
data=b"Hello World"
f.write(data)
f.close()

La conversion d'une chaîne de texte en octets est également possible à l'aide de la fonction encode ().

data="Hello World".encode('utf-8')

Nous devons utiliser ‘rb’mode pour lire le fichier binaire. La valeur renvoyée de la méthode read () est d'abord décodée avant l'impression.

f=open('test.bin', 'rb')
data=f.read()
print (data.decode(encoding='utf-8'))

Afin d'écrire des données entières dans un fichier binaire, l'objet entier doit être converti en octets par to_bytes() méthode.

n=25
n.to_bytes(8,'big')
f=open('test.bin', 'wb')
data=n.to_bytes(8,'big')
f.write(data)

Pour relire un fichier binaire, convertissez la sortie de la fonction read () en entier par la fonction from_bytes ().

f=open('test.bin', 'rb')
data=f.read()
n=int.from_bytes(data, 'big')
print (n)

Pour les données en virgule flottante, nous devons utiliser struct module de la bibliothèque standard de Python.

import struct
x=23.50
data=struct.pack('f',x)
f=open('test.bin', 'wb')
f.write(data)

Décompression de la chaîne de la fonction read (), pour récupérer les données flottantes du fichier binaire.

f=open('test.bin', 'rb')
data=f.read()
x=struct.unpack('f', data)
print (x)

Lecture / écriture simultanée

Lorsqu'un fichier est ouvert pour l'écriture (avec 'w' ou 'a'), il n'est pas possible d'en lire et vice versa. Cela génère une erreur UnSupportedOperation. Nous devons fermer le fichier avant d'effectuer une autre opération.

Afin d'effectuer les deux opérations simultanément, nous devons ajouter le caractère «+» dans le paramètre mode. Par conséquent, le mode 'w +' ou 'r +' permet d'utiliser les méthodes write () ainsi que read () sans fermer un fichier. L'objet File prend également en charge la fonction seek () pour rembobiner le flux à n'importe quelle position d'octet souhaitée.

f=open('test.txt','w+')
f.write('Hello world')
f.seek(0,0)
data=f.read()
print (data)
f.close()

Le tableau suivant résume toutes les méthodes disponibles pour un fichier comme un objet.

Sr. Non Méthode et description
1

close()

Ferme le fichier. Un fichier fermé ne peut plus être lu ou écrit.

2

flush()

Videz le tampon interne.

3

fileno()

Renvoie le descripteur de fichier entier.

4

next()

Renvoie la ligne suivante du fichier chaque fois qu'il est appelé. Utilisez l'itérateur next () dans Python 3.

5

read([size])

Lit au maximum les octets de taille du fichier (moins si la lecture atteint EOF avant d'obtenir des octets de taille).

6

readline([size])

Lit une ligne entière du fichier. Un caractère de fin de ligne est conservé dans la chaîne.

sept

readlines([sizehint])

Lit jusqu'à EOF en utilisant readline () et retourne une liste contenant les lignes.

8

seek(offset[, whence])

Définit la position actuelle du fichier. 0-début 1-courant 2-fin.

9

seek(offset[, whence])

Définit la position actuelle du fichier. 0-début 1-courant 2-fin.

dix

tell()

Renvoie la position actuelle du fichier

11

truncate([size])

Tronque la taille du fichier.

12

write(str)

Écrit une chaîne dans le fichier. Il n'y a pas de valeur de retour.