Recherche de site Web

Comment gérer les fichiers texte brut en Python 3


Introduction

Python est un excellent outil pour le traitement des données. Certaines des tâches les plus courantes en programmation impliquent la lecture, l'écriture ou la manipulation de données. Pour cette raison, il est particulièrement utile de savoir comment gérer différents formats de fichiers qui stockent différents types de données.

Par exemple, considérez un programme en Python qui vérifie une liste d'utilisateurs pour le contrôle d'accès. Votre liste d'utilisateurs peut être stockée sous forme de fichier texte, vous permettant de vérifier l'accès ou de modifier les autorisations. Avec Python, être capable d'ouvrir, de lire, d'écrire et de fermer des fichiers vous aidera à travailler sur des tâches comme celle-ci.

Ce tutoriel décrira brièvement certains des formats de fichiers que Python peut gérer. Après une brève introduction à ceux-ci, vous apprendrez à ouvrir, lire et écrire un fichier texte en Python 3. Une fois que vous aurez terminé, vous serez capable de gérer n'importe quel fichier texte simple en Python.

Conditions préalables

Pour ce tutoriel, vous devez avoir Python 3 installé ainsi qu'un environnement de programmation local configuré sur votre ordinateur. Si ce n'est pas le cas, vous pouvez vous préparer en suivant le guide d'installation et de configuration approprié pour votre système d'exploitation :

  • Ubuntu 22.04 ou Debian 8
  • CentOS 7
  • Mac OS X
  • Windows 10

Contexte

Python est très flexible et peut gérer un certain nombre de formats de fichiers différents avec aisance, y compris mais sans s'y limiter aux suivants :

Type de fichierDescription
Texte simpleLes fichiers texte simples stockent des données qui ne représentent que des caractères (ou des chaînes) et excluent toute métadonnée structurée.
CSVLes fichiers de valeurs séparées par des virgules utilisent des virgules (ou d'autres délimiteurs) pour structurer les données stockées, permettant ainsi de sauvegarder des données au format de tableau.
HTMLLes fichiers HyperText Markup Language stockent des données structurées destinées à être affichées par un navigateur et sont couramment utilisés avec des sites web.
JSONLe format JSON (JavaScript Object Notation) est un format simple et efficace, ce qui en fait l'un des formats les plus couramment utilisés pour stocker et transférer des données structurées.

Ce tutoriel se concentrera sur le travail avec des fichiers texte brut.

Étape 1 — Création d'un fichier texte

Avant de pouvoir commencer à travailler en Python, nous devons nous assurer que nous avons un fichier avec lequel travailler. Pour ce faire, ouvrez votre éditeur de code et créez un nouveau fichier texte simple appelé days.txt.

Dans le nouveau fichier, entrez quelques lignes de texte listant les jours de la semaine :

Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

Ensuite, enregistrez votre fichier et notez son emplacement. Pour cet exemple, notre utilisateur sammy a enregistré le fichier ici en tant que /home/sammy/days.txt. Cela sera très important dans les étapes ultérieures, où nous ouvrirons le fichier en Python.

Maintenant que vous avez un fichier à traiter, vous pouvez commencer à coder.

Étape 2 — Ouvrir un fichier

Dans votre éditeur de code, créez un nouveau fichier Python et nommez-le files.py.

Pour ouvrir un fichier en Python, nous devons d'abord avoir un moyen d'associer le fichier sur le disque avec une variable en Python. Ce processus est appelé ouverture d'un fichier, et la variable est appelée un handle de fichier. Nous commençons par indiquer à Python où se trouve le fichier. L'emplacement de votre fichier est souvent appelé le chemin du fichier — /home/sammy/days.txt dans cet exemple. Créez une variable pour stocker ces informations de chemin.

path = '/home/sammy/days.txt'

Maintenant, vous pouvez utiliser la fonction open() de Python pour ouvrir notre fichier days.txt. La fonction open() nécessite le chemin du fichier comme premier argument. La fonction accepte également de nombreux autres paramètres. Cependant, le plus important est le paramètre optionnel mode. Il s'agit d'une chaîne optionnelle qui spécifie le mode dans lequel le fichier est ouvert. Le mode que vous choisissez dépendra de ce que vous souhaitez faire avec le fichier. Voici quelques-uns des modes disponibles :

  • 'r' : utilisé pour lire à partir d'un fichier
  • 'w' : utiliser pour écrire dans un fichier
  • 'a' : utiliser pour ajouter à un fichier
  • 'r+' : à utiliser pour lire et écrire dans le même fichier

Dans cet exemple, nous voulons seulement lire le fichier, donc nous allons utiliser le mode 'r'. Utilisez la fonction open() pour ouvrir le fichier days.txt et assignez le gestionnaire de fichier résultant à la variable days_file.

days_file = open(path, 'r')

Maintenant que vous avez ouvert le fichier, l'étape suivante vous guidera à travers la lecture de son contenu.

Étape 3 — Lire un fichier

Depuis que notre fichier a été ouvert, nous pouvons maintenant le manipuler (c'est-à-dire en lire le contenu) via la variable à laquelle il a été attribué. Python fournit trois opérations liées pour lire des informations à partir d'un fichier. Prenons un moment pour comprendre comment chacune d'elles fonctionne.

Utiliser read

La première opération read() renvoie le contenu entier du fichier sous la forme d'une seule chaîne. Par exemple :

days_file.read()

Le résultat serait :

'Monday\nTuesday\nWednesday\nThursday\nFriday\nSaturday\nSunday\n'

Remarque : Le \n dans la chaîne ci-dessus représente un caractère de nouvelle ligne. Lors de l'interaction directe avec Python (comme vous pourriez le faire en exécutant simplement python depuis la ligne de commande), il utilisera \n pour afficher les sauts de ligne. Vous pouvez également l'utiliser pour représenter une nouvelle ligne lorsque vous créez vos propres chaînes.

Utiliser readline

La deuxième opération readline() renvoie la ligne suivante du fichier, renvoyant le texte jusqu'au prochain caractère de nouvelle ligne inclus. Pour le dire plus simplement, cette opération lira un fichier ligne par ligne.

days_file.readline()

Le résultat serait :

'Monday\n'

Une fois que vous avez lu une ligne avec l'opération readline, le point actuel à partir duquel le fichier sera lu se déplacera à la ligne suivante. Si vous deviez appeler à nouveau cette opération, elle renverrait la ligne suivante du fichier comme ceci:

days_file.readline()
'Tuesday\n'

Utiliser readlines

La dernière opération, readlines() retourne une liste des lignes dans le fichier, où chaque élément de la liste représente une seule ligne.

days_file.readlines()
['Monday\n', 'Tuesday\n', 'Wednesday\n', 'Thursday\n', 'Friday\n', 'Saturday\n', 'Sunday\n']

quelque chose à garder à l'esprit lorsque vous lisez des fichiers, une fois qu'un fichier a été lu à l'aide de l'une des opérations de lecture, il ne peut plus être relu. Par exemple, si vous exécutiez d'abord days_file.read() puis days_file.readlines(), la deuxième opération renverrait une chaîne vide. Ainsi, chaque fois que vous souhaitez lire un fichier, vous devrez d'abord ouvrir une nouvelle variable de fichier ou utiliser la méthode seek(), ce qui dépasse le cadre de ce tutoriel. Si vous souhaitez en savoir plus, Python dispose d'une excellente documentation sur ces méthodes.

Maintenant que nous avons lu à partir d'un fichier, apprenons à écrire dans un nouveau fichier.

Étape 4 — Écrire un fichier

Dans cette étape, vous allez écrire un nouveau fichier qui inclut le titre Jours de la semaine suivi du contenu du premier fichier. Tout d'abord, créez une variable titre.

title = 'Days of the Week\n'

Vous devrez également stocker les jours de la semaine dans une variable, que nous appellerons days. Ce code ouvre le fichier en mode lecture, lit le fichier et stocke la sortie renvoyée par l'opération de lecture dans notre nouvelle variable days. Pour faciliter la compréhension, le code de l'Étape 2 est inclus.

path = '/home/sammy/days.txt'
days_file = open(path, 'r')
days = days_file.read()

Maintenant que vous avez des variables pour le titre et les jours de la semaine, vous pouvez commencer à écrire dans votre nouveau fichier. Tout d'abord, spécifiez l'emplacement du fichier. Encore une fois, nous utiliserons le répertoire /home/sammy/, donc notre chemin sera /home/sammy/new_days.txt. Vous pouvez ensuite ouvrir le nouveau fichier en mode écriture, en utilisant la fonction open() avec le mode 'w' spécifié.

new_path = '/home/sammy/new_days.txt'
new_days = open(new_path, 'w')

Remarque : Il est important de noter que, si new_days.txt existe déjà avant d'ouvrir le fichier, son ancien contenu sera écrasé, donc faites attention lorsque vous utilisez le mode 'w'!

Une fois le nouveau fichier ouvert, vous pouvez ajouter des données en utilisant la méthode write(). Cette méthode prend un seul paramètre de chaîne et écrit ces données dans le fichier. Si vous souhaitez commencer une nouvelle ligne dans le fichier, vous devez fournir explicitement le caractère de nouvelle ligne, \n, qui a été inclus lorsque vous avez assigné 'Jours de la semaine\n' à la variable title.

Écrivez le titre du fichier suivi des jours de la semaine. Il peut être utile d'ajouter quelques instructions print sur ce que nous écrivons dans le fichier, ce qui est souvent utilisé pour suivre les progrès de vos scripts.

new_days.write(title)
print(title)

new_days.write(days)
print(days)

Enfin, chaque fois que vous avez terminé avec un fichier, il est important de le fermer.

Étape 5 — Fermer un fichier

Fermer un fichier garantit que la connexion entre le fichier sur le disque et le descripteur de fichier est terminée. Fermer les fichiers permet également aux autres programmes d'y accéder et protège vos données. Si vous n'utilisez pas les instructions with comme décrit dans Étape 6, assurez-vous toujours de fermer vos fichiers. Pour cet exemple, fermez tous nos fichiers en utilisant la méthode close().

days_file.close()
new_days.close()

Maintenant que le script a terminé d'utiliser les fichiers, il libère les descripteurs de fichiers en utilisant la méthode close().

Étape 6 — Utilisation des instructions with (facultatif)

La manière recommandée de travailler avec des fichiers en Python (souvent appelée la façon Pythonic) est d'utiliser une fonctionnalité du langage appelée with. Ces déclarations sont des méthodes abrégées pour établir un contexte dans lequel le travail est effectué et, une fois ce contexte terminé, les détails finaux sont automatiquement pris en charge afin de prévenir les erreurs communes. Dans le cas du travail avec des fichiers, une déclaration with fermera automatiquement le fichier afin que vous n'ayez pas ces poignées de fichiers en attente une fois que vous avez terminé votre tâche.

Comme avec tout bloc en Python, comme les définitions de fonctions, les instructions if, ou les boucles, les instructions with prennent la forme d'une simple instruction suivie d'un : et d'un bloc de code indenté. Voici un exemple de code qui ouvre un fichier et imprime son contenu :

with open('/home/sammy/days.txt', 'r') as days_file:
    days = days_file.read()
    print(days)

Décrivons ce que ce code fait étape par étape. Comme auparavant, nous ouvrons le fichier en utilisant la fonction intégrée open() de Python, en passant le chemin du fichier et les paramètres de mode. Cependant, puisque nous utilisons l'instruction with, plutôt que d'assigner le fichier résultant à une variable en utilisant =, nous l'assignons en utilisant le mot-clé as. Cela fait partie de la syntaxe complète de l'instruction with :

with action as result:
    . . .

Après les :, nous passons à la ligne suivante et indentons notre code, ce qui est la façon dont Python organise les blocs de fonctionnalité. Comme auparavant, nous avons accès à la poignée de fichier dans la variable days_file, nous pouvons donc appeler la méthode read() pour obtenir tout le contenu et les print().

Remarquez qu'aucune méthode close() n'est appelée, cependant. Cela est dû au fait qu'aussitôt que le code sort de ce bloc (c'est-à-dire dès que la ligne de code suivante n'est pas indentée ou que le fichier se termine), le contexte de l'instruction with sait fermer ces fichiers automatiquement. Les avantages de cela ne résident pas seulement dans le fait que vous n'avez pas besoin de vous souvenir de fermer vos fichiers chaque fois, mais aussi que toute votre logique pour traiter ce fichier en particulier est visuellement et logiquement distincte dans ce bloc. Cette structure aide à garder votre code propre et lisible.

Dans cet esprit, réécrivons notre code d'avant en utilisant l'instruction with :

with open(path, 'r') as days_file, open(new_path, 'w') as new_days:
    days = days_file.read()
    
    new_days.write(title)
    new_days.write(days)
    
print(title)
print(days)

Maintenant, le code est beaucoup plus organisé. Nous commençons comme auparavant en définissant quelques variables : les chemins de nos deux fichiers et le titre que nous utiliserons pour le nouvel en-tête. Ensuite, nous commençons notre instruction with, ouvrant nos deux fichiers et stockant leurs connexions dans des variables nommées de manière appropriée. Comme auparavant, nous lisons le contenu du days_file, puis écrivons le titre et ce contenu dans new_days. Enfin, nous terminons le bloc en dés-indant notre code afin d'afficher les valeurs de title et days que nous avons lues.

Remarque : Contrairement à certains autres blocs en Python, les variables définies dans les blocs with sont disponibles en dehors de cette portée.

Bien qu'il existe certains cas où vous voudrez utiliser la méthode close() comme décrit précédemment et qu'il est important de savoir comment elle fonctionne, vous utiliserez le plus souvent des instructions with lorsque vous travaillerez avec des fichiers en Python.

Étape 7 — Vérification de notre code

Avant d'exécuter votre code, il est bon de s'assurer que tout semble correct. Le produit final devrait ressembler à quelque chose comme ceci :

path = '/home/sammy/days.txt'
new_path = '/home/sammy/new_days.txt'
title = 'Days of the week\n'

with open(path, 'r') as days_file, open(new_path, 'w') as new_days:
    days = days_file.read()
    
    new_days.write(title)
    new_days.write(days)
    
print(title)
print(days)

Après avoir enregistré votre code, ouvrez le terminal et exécutez votre script Python, comme ceci :

  1. python files.py

La sortie sera comme suit :

Days of the Week

Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

Maintenant, vérifiez à nouveau que le code a bien fonctionné en ouvrant le nouveau fichier (new_days.txt). Si tout s'est bien passé, il devrait contenir ceci :

Days of the Week
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

Conclusion

Dans ce tutoriel, nous avons vu comment gérer et manipuler des fichiers texte simples en Python 3. Maintenant, vous pouvez ouvrir, lire, écrire et fermer des fichiers en Python, et vous pouvez continuer à travailler avec vos propres données en Python. Python fournit de nombreuses autres méthodes utiles lors du travail avec l'entrée et la sortie, et il propose également une documentation pour en apprendre davantage.