La manipulation de fichiers est un élément crucial dans tout langage de programmation, et Python n’échappe pas à cette règle. Il offre une prise en charge étendue pour interagir avec des fichiers, que ce soit pour la lecture, l’écriture ou d’autres opérations.
À l’issue de ce tutoriel, vous maîtriserez les compétences suivantes :
- Ouvrir et parcourir des fichiers en Python.
- Extraire des lignes spécifiques d’un fichier texte.
- Modifier des fichiers existants et y ajouter du contenu.
- Employer les gestionnaires de contexte pour une gestion de fichiers plus sécurisée et efficace en Python.
Méthodes de lecture de fichiers en Python
Pour initier la lecture d’un fichier en Python, la syntaxe générale est `open(‘nom_du_fichier’, ‘mode’)`.
- `nom_du_fichier` représente le nom du fichier que vous souhaitez manipuler.
Important : Si le fichier cible se trouve dans le même répertoire que votre script Python, il suffit d’indiquer son nom. S’il est situé dans un autre dossier, vous devrez préciser son chemin d’accès complet.
- Le paramètre `mode` spécifie la manière dont le fichier sera ouvert (lecture, écriture, etc.).
Par défaut, l’ouverture d’un fichier se fait en mode lecture, désigné par la lettre « r ». Cependant, il est vivement conseillé de spécifier explicitement le mode souhaité pour plus de clarté et de sécurité.
Avant de plonger dans le code, examinons le contenu du fichier `lib.txt` qui servira d’exemple pratique.
📁 Vous pouvez télécharger le fichier texte et les extraits de code utilisés dans ce tutoriel en cliquant sur ce lien GitHub.
L’extrait de code ci-dessous illustre comment ouvrir un fichier texte nommé `lib.txt` avec Python à l’aide de la fonction `open()`, et comment afficher son contenu :
file = open('lib.txt','r') contents = file.read() print(contents) file.close() # Sortie Hello, there! Here are a few helpful Python libraries: 1) NumPy 2) pandas 3) matplotlib 4) seaborn 5) scikit-learn 6) BeautifulSoup 7) Scrapy 8) nltk 9) Bokeh 10) statsmodels
Dans cet exemple :
- La fonction `open()` crée un objet fichier, que nous avons nommé `file`.
- Nous appliquons ensuite la méthode `read()` à l’objet `file`.
- La variable `contents` contient désormais l’intégralité du contenu du fichier, que nous affichons à l’écran.
- Enfin, nous refermons le fichier à l’aide de la méthode `close()`.
Omettre la fermeture d’un fichier après son utilisation peut engendrer une consommation inutile de ressources. Si vous gérez un grand nombre de fichiers, cela peut impacter significativement la mémoire vive. C’est pourquoi il est essentiel de toujours fermer les fichiers après usage.
Voyons maintenant une approche plus élégante pour manipuler les fichiers en utilisant les gestionnaires de contexte. L’extrait de code suivant démontre leur utilisation :
with open('lib.txt','r') as f: contents = f.read() print(contents)
En utilisant les gestionnaires de contexte, vous n’avez plus besoin d’appeler explicitement la méthode `close()`. Le fichier est automatiquement fermé une fois l’opération d’entrée/sortie (E/S) terminée, simplifiant ainsi la gestion des ressources.
Techniques de lecture de lignes dans un fichier en Python
Notre fichier texte d’exemple ne contenait que quelques lignes. La lecture du contenu complet d’un coup n’était donc pas un problème.
Cependant, avec des fichiers plus volumineux, la méthode `read()` peut se montrer moins efficace et même conduire à une saturation de la mémoire si vous tentez de lire l’intégralité du fichier d’un seul tenant.
Dans ce cas, la lecture ligne par ligne devient nécessaire. Cette section vous guidera à travers les méthodes pour extraire des lignes spécifiques d’un fichier texte.
Utilisation de la méthode `readline()` pour lire une ligne
La méthode `readline()` permet de lire une seule ligne à la fois dans un fichier.
Exécutez l’extrait de code ci-dessous :
with open('lib.txt','r') as f: line = f.readline() print(line) line = f.readline() print(line) # Sortie Hello, there! Here are a few helpful Python libraries:
Comme vous pouvez le constater, le premier appel de `readline()` affiche la première ligne du fichier, tandis que le second appel affiche la ligne suivante. C’est parce qu’après le premier appel, le pointeur de fichier se déplace au début de la ligne suivante.
En Python, vous pouvez utiliser la méthode `tell()` pour connaître la position actuelle du pointeur dans le fichier et la méthode `seek()` pour déplacer ce pointeur vers une position spécifique.
L’extrait ci-dessous utilise `f.seek(0)` après le premier appel, ramenant ainsi le pointeur au début du fichier. Ainsi, la première ligne est affichée deux fois :
with open('lib.txt','r') as f: line = f.readline() print(line) f.seek(0) line = f.readline() print(line) # Sortie Hello, there! Hello, there!
Utilisation de la méthode `readlines()` pour lire toutes les lignes
La méthode `readlines()` offre une approche similaire, mais différente.
En exécutant l’extrait suivant, vous verrez que `readlines()` renvoie une liste contenant toutes les lignes du fichier :
with open('lib.txt','r') as f: lines = f.readlines() print(lines) # Sortie ['Hello, there!n', 'Here are a few helpful Python libraries:n', '1) NumPyn', '2) pandasn', '3) matplotlibn', '4) seabornn', '5) scikit-learnn', '6) BeautifulSoupn', '7) Scrapyn', '8) nltkn', '9) Bokehn', '10) statsmodelsn', 'n']
Lecture de lignes avec une boucle `for`
Vous pouvez aussi lire un fichier ligne par ligne en utilisant une boucle `for`.
Après avoir ouvert le fichier, vous pouvez parcourir son contenu ligne par ligne et l’afficher comme dans l’extrait suivant. Notez que nous accédons bien à une seule ligne à la fois et ne lisons pas l’ensemble du fichier.
with open('lib.txt','r') as f: for line in f: print(line, end='')
Important : La fonction `print()` utilise par défaut un retour à la ligne (« \n ») comme séparateur. Afin d’afficher le contenu tel qu’il apparaît dans le fichier original, où ces retours à la ligne sont déjà présents, nous définissons l’argument `end` sur une chaîne vide (`end= » »`).
Lecture de blocs de contenu dans un fichier en Python
Il est également possible de lire le contenu d’un fichier par morceaux plus petits.
Considérez le code ci-dessous :
- Nous définissons `chunk_size` à 50, ce qui signifie que les 50 premiers caractères du fichier seront lus et affichés.
- Ensuite, la méthode `tell()` est appliquée à l’objet fichier `f`, révélant que le pointeur de fichier se situe désormais à la position 51, comme attendu.
chunk_size = 50 with open('lib.txt','r') as f: chunk = f.read(chunk_size) print(chunk) current = f.tell() print(f"Current position of file pointer: {current}") # Sortie Hello, there! Here are a few helpful Python librar Current position of file pointer: 51
Vous pouvez utiliser cette méthode pour lire un fichier entier par petits blocs.
L’exemple suivant illustre cette technique :
chunk_size = 50 with open('lib.txt','r') as f: chunk = f.read(chunk_size) print(chunk,end='') while(len(chunk)>0): chunk = f.read(chunk_size) print(chunk,end='') # Sortie Hello, there! Here are a few helpful Python libraries: 1) NumPy 2) pandas 3) matplotlib 4) seaborn 5) scikit-learn 6) BeautifulSoup 7) Scrapy 8) nltk 9) Bokeh 10) statsmodels
Ici, une boucle `while` lit le contenu du fichier par blocs de 50 caractères jusqu’à atteindre la fin du fichier. ✅
Comment écrire dans un fichier en Python
Pour écrire dans un fichier texte avec Python, vous devez l’ouvrir en mode écriture, en utilisant le mode `w`.
L’extrait de code ci-dessous illustre cette procédure :
with open('new_file.txt','w') as f: f.write('Hello, Python!')
Vous devriez voir un nouveau fichier `new_file.txt` apparaître dans votre répertoire de travail.
Maintenant, exécutez à nouveau le même code.
Dans votre terminal, tapez la commande suivante :
cat new_file.txt # Sortie: Hello, Python!
En principe, nous avons écrit deux fois dans le fichier. Par conséquent, « Hello, Python! » aurait dû s’afficher deux fois, n’est-ce pas ?
Mais vous constatez qu’il n’est affiché qu’une seule fois. Cela est dû au fait que l’ouverture d’un fichier en mode écriture (`w`) écrase le contenu existant par un nouveau.
Si vous souhaitez ajouter du contenu à la fin d’un fichier sans effacer son contenu actuel, vous devez l’ouvrir en mode ajout. Voyons comment faire dans la section suivante.
Comment ajouter du contenu à un fichier en Python
Pour ajouter du texte à un fichier sans écraser son contenu, ouvrez-le en mode ajout.
Pour cela, utilisez le mode `’a’` (a pour append) et spécifiez-le explicitement.
Ensuite, exécutez l’extrait de code suivant deux fois :
with open('new_file.txt','a') as f: f.write('Hello, Python!')
Observez comment le texte est maintenant affiché deux fois, indiquant que nous avons bien ajouté du contenu au fichier :
cat new_file.txt # Sortie: Hello, Python!Hello, Python!
Conclusion
Récapitulons les points essentiels de ce tutoriel :
- Vous avez appris les opérations courantes sur les fichiers, notamment la lecture, l’écriture et l’ajout de contenu.
- Vous savez comment utiliser la méthode `seek()` pour déplacer le pointeur de fichier et la méthode `tell()` pour en connaître la position actuelle.
J’espère que ce tutoriel vous a été utile. Maintenant que vous maîtrisez la gestion des fichiers texte en Python, vous pouvez vous pencher sur la manipulation des fichiers JSON.
À lire également :
Comment vérifier la longueur d’une liste en Python en 3 étapes.