Fichiers

Un fichier est un ensemble de données dans la mémoire externe qui porte un nom. 

Il existe deux types de fichiers en Python :
- texte, qui contient du texte interrompu sur une ligne ; Parmi les caractères spéciaux dans les fichiers texte, il ne peut y avoir que des caractères de retour à la ligne ("\n") et un retour au début de la ligne ("\r" ;);
- binary, qui stocke toutes les données binaires sans restriction (par exemple, des images, des sons, des vidéos, etc.).

Ensuite, nous envisagerons de travailler avec des fichiers texte.

 

Le principe de travailler avec un fichier du programme
Se compose de trois étapes :
1. ouvrir un dossier ;
2. travailler avec le fichier ;
3. fermer le fichier.
Ce principe de fonctionnement est appelé le "principe du sandwich"..

A l'ouverture d'un fichier, le mode de fonctionnement est indiqué : lecture, écriture ou ajout de données à la fin du fichier. Le fichier ouvert est bloqué et les autres programmes ne peuvent pas y accéder. Après avoir travaillé avec le fichier, vous devez le fermer pour rompre la connexion avec le programme. Lorsqu'un fichier est fermé, toutes les modifications apportées par le programme dans ce fichier sont écrites sur le disque. Python fonctionne avec les fichiers via des variables de fichier.

La fonction open() permetd'ouvrir un fichier et renvoie une variable de fichier qui peut être utilisée pour accéder au fichier.
f = open(file_name, access_mode)
où :
- file_name - nom du fichier à ouvrir
- access_mode - mode d'ouverture du fichier. Il peut s'agir de : lecture, écriture, etc. Le mode par défaut est lecture (r) sauf indication contraire. 
 
Liste complète des modes d'ouverture de fichiers
Mode Description
r Lecture seule.
w Inscriptible uniquement. Créera un nouveau fichier s'il n'est pas trouvé avec le nom spécifié.
rb Lecture seule (binaire).
wb Écriture seule (binaire). Créera un nouveau fichier s'il n'est pas trouvé avec le nom spécifié.
r+ Pour lire et écrire.
rb+ Pour lire et écrire (binaire).
w+ Pour lire et écrire. Créera un nouveau fichier accessible en écriture s'il n'est pas trouvé avec le nom spécifié.
wb+ Pour la lecture et l'écriture (binaire). Créera un nouveau fichier accessible en écriture s'il n'est pas trouvé avec le nom spécifié.
a S'ouvre pour ajouter du nouveau contenu. Créera un nouveau fichier accessible en écriture s'il n'est pas trouvé avec le nom spécifié.
a+ S'ouvre pour ajouter du nouveau contenu. Créera un nouveau fichier pour lire l'entrée si elle n'est pas trouvée avec le nom spécifié.
ab Ouvre pour ajouter un nouveau contenu (binaire). Créera un nouveau fichier accessible en écriture s'il n'est pas trouvé avec le nom spécifié.
ab+ Ouvre pour ajouter un nouveau contenu (binaire). Créera un nouveau fichier pour lire l'entrée si elle n'est pas trouvée avec le nom spécifié.

 
La méthode close() permet de fermer un fichier.

Exemple
Fin = open("input.txt") Fout = open("sortie.txt")    # faire quelque chose avec les fichiers fout.close() Fin.close() Si un fichier existant est ouvert en écriture, son contenu est détruit. Après la fin du programme, tous les fichiers ouverts sont fermés automatiquement.
 

Lire les données d'un fichier

Lors de la lecture d'un fichier texte, le flux d'octets entre dans l'entrée du programme de manière séquentielle les uns après les autres, de sorte que le fichier fournit un accès séquentiel aux données. Autrement dit, si nous devons lire la 10ème valeur du fichier, nous devons d'abord lire les 9 précédentes.

La lecture d'une seule ligne d'un fichier permet à la méthode readline() de s'exécuter. Cette méthode est appelée sur une variable de fichier. Fin = open("input.txt") s = Fin.readline()
Différentes méthodes peuvent être appliquées à la chaîne lue, similaires à celles utilisées lors de la lecture au clavier (split(), map(), etc.). Par exemple, s'il y a deux nombres séparés par un espace dans une ligne d'un fichier, alors vous pouvez les compter comme suit : Fin = open("input.txt") s = Fin.readline().split() # diviser la ligne sur les espaces s = ["2007", "2021"] a, b = map(entier, s)         # appliquer la méthode int() à tous les éléments de la liste s,   # c'est-à-dire convertir la chaîne de caractères en nombre # a, b = int(s[0], s[1])   # c'est la même chose que la ligne ci-dessus # a, b = [int(x) for x in s] # comme un générateur
La méthode read() lit tout le contenu du fichier et renvoie une chaîne pouvant contenir les caractères '\n'. Si un paramètre entier est passé à la méthode read(), pas plus que le nombre de caractères spécifié ne sera lu. Par exemple, vous pouvez lire un fichier octet par octet en utilisant la méthode read(1).
.
Lorsqu'un fichier est ouvert, le pointeur qui détermine l'emplacement actuel dans le fichier est placé au début du fichier et, lors de la lecture, est décalé à la position suivant les données lues. Lors de l'écriture, le pointeur est déplacé vers la position libre suivante.

Écrire des données dans un fichier

La méthode write() est utilisée pour écrire des données dans un fichier. Les données numériques doivent être converties en chaîne. Cela peut être fait soit avec la méthode format() ou avec la méthode str().

 

Fichiers multilignes

Lorsque vous travaillez avec des fichiers multilignes, vous devez savoir quand les données du fichier sont épuisées. Pour cela, vous pouvez utiliser la fonctionnalité des méthodes readline() : si le curseur du fichier pointe vers la fin du fichier, alors la méthode readline() renvoie une chaîne vide, qui est perçue comme une fausse valeur booléenne : tandis que Vrai :     s = Fin.readline()     sinon s : pause   # si une chaîne vide est reçue lors de la lecture d'une chaîne,   # la boucle se termine par une instruction break     print(s, end="")  # désactiver la nouvelle ligne, car lors de la lecture d'une ligne à partir d'un fichier                       # caractère de retour à la ligne "\n" enregistré

 

Autres façons de lire des données à partir de fichiers multilignes
1. Immédiatement toutes les données de la liste. Fin = open("input.txt") list_strings = Fin.readlines()    # lire toutes les lignes à la fois Fin.close() pour s dans list_strings :     print(s, end="")
2. Utilisation de la construction with-as. Dans ce cas, le dossier est fermé automatiquement après la fin du cycle. avec open("input.txt") comme Fin :     pour s en Fin :         print(s, end="") Cette construction garantit que le fichier est fermé. 


3. Un moyen d'itérer sur les chaînes dans le style du langage Python (il est recommandé d'utiliser cette méthode). Dans ce cas, le dossier est également fermé automatiquement. pour s dans open("input.txt"):     impression(s, fin="")

Fichier cyrillique

Si le fichier contient des lettres russes (tout caractère avec un code supérieur à 127), vous devez spécifier l'encodage lors de l'ouverture data = open("input.txt", "r", encoding="utf-8")