Pratiquer avec les modes Lecture/Écriture et Choisir le Bon Mode
Python propose également des modes qui permettent à la fois la lecture et l'écriture dans le même contexte open()
. Ceux-ci offrent plus de flexibilité, mais nécessitent une manipulation prudente du pointeur de fichier.
- Lecture et Écriture (
'r+'
): Ouvre un fichier existant pour la lecture et l'écriture. Le pointeur commence au début. L'écriture écrasera le contenu existant à partir de la position du pointeur.
- Écriture et Lecture (
'w+'
): Ouvre un fichier pour l'écriture et la lecture. Il tronque le fichier s'il existe ou le crée s'il n'existe pas. Le pointeur commence au début.
- Ajout et Lecture (
'a+'
): Ouvre un fichier pour l'ajout (écriture à la fin) et la lecture. Il crée le fichier s'il n'existe pas. Le pointeur commence à la fin pour l'écriture, mais vous pouvez le déplacer (par exemple, en utilisant file.seek(0)
) pour lire depuis le début.
Illustrons 'r+'
. Nous utiliserons le fichier my_reading_file.txt
créé à l'étape 1. Nous allons l'ouvrir, lire le contenu, puis déplacer le pointeur au début et écraser le début du fichier.
Créez un fichier Python nommé rplus_example.py
dans /home/labex/project
. Ajoutez ce code :
try:
## Open the file in read and write mode ('r+')
## The file must exist for this mode.
with open('/home/labex/project/my_reading_file.txt', 'r+') as file:
## Read the initial content
initial_content = file.read()
print("Initial file content:")
print(initial_content)
## Move the file pointer back to the beginning
print("\nMoving pointer to the beginning using file.seek(0).")
file.seek(0)
## Write new content at the beginning (overwriting existing content)
print("Writing new content...")
file.write("Prepended line 1.\n")
file.write("Prepended line 2.\n")
## If the new content is shorter than what was overwritten,
## the rest of the original content might remain unless truncated.
## We can use file.truncate() after writing to remove any trailing old data.
print("Truncating file to the current position to remove old trailing data.")
file.truncate()
print("\nContent written and file truncated.")
except FileNotFoundError:
print("Error: The file was not found. 'r+' requires the file to exist.")
except Exception as e:
print(f"An error occurred: {e}")
print("\nFinished with r+ mode example.")
Ce script ouvre le fichier en mode 'r+'
, lit, revient au début (file.seek(0)
), écrit de nouvelles lignes (en écrasant), puis utilise file.truncate()
pour supprimer tout contenu original restant qui pourrait exister au-delà du texte nouvellement écrit.
Enregistrez rplus_example.py
. Avant de l'exécuter, assurons-nous que my_reading_file.txt
a son contenu original :
echo "This is the first line." > /home/labex/project/my_reading_file.txt
echo "This is the second line." >> /home/labex/project/my_reading_file.txt
Maintenant, exécutez le script Python depuis le terminal :
python rplus_example.py
Vous verrez le contenu initial imprimé, suivi de messages concernant le processus :
Initial file content:
This is the first line.
This is the second line.
Moving pointer to the beginning using file.seek(0).
Writing new content...
Truncating file to the current position to remove old trailing data.
Content written and file truncated.
Finished with r+ mode example.
Vérifiez le contenu final du fichier en utilisant cat
:
cat /home/labex/project/my_reading_file.txt
La sortie ne devrait afficher que le contenu nouvellement écrit, grâce à l'écrasement et à la troncature :
Prepended line 1.
Prepended line 2.
Choisir le Mode d'Accès au Fichier Approprié
Sélectionner le mode correct est vital. Voici un guide rapide :
- Utilisez
'r'
pour un accès en lecture seule aux fichiers existants.
- Utilisez
'w'
pour créer un nouveau fichier ou remplacer complètement le contenu d'un fichier existant.
- Utilisez
'a'
pour ajouter à la fin d'un fichier sans perdre les données existantes (bon pour les journaux/logs).
- Utilisez
'r+'
pour lire et modifier un fichier existant depuis le début.
- Utilisez
'w+'
pour créer ou écraser un fichier, puis le lire/écrire.
- Utilisez
'a+'
pour ajouter à un fichier et également pouvoir le lire (nécessite l'utilisation de seek()
).
Ce tableau résume les comportements clés :
Mode |
Lecture (Read) |
Écriture (Write) |
Créer si n'existe pas (Create if not exists) |
Tronquer si existe (Truncate if exists) |
Position du pointeur (initiale) (Pointer Position (Initial)) |
'r' |
Oui |
Non |
Non |
Non |
Début (Beginning) |
'w' |
Non |
Oui |
Oui |
Oui |
Début (Beginning) |
'a' |
Non |
Oui |
Oui |
Non |
Fin (End) |
'r+' |
Oui |
Oui |
Non |
Non |
Début (Beginning) |
'w+' |
Oui |
Oui |
Oui |
Oui |
Début (Beginning) |
'a+' |
Oui |
Oui |
Oui |
Non |
Fin (End) |
En considérant si vous devez lire, écrire, ajouter, gérer des fichiers existants ou en créer de nouveaux, vous pouvez choisir en toute confiance le mode le plus approprié à votre tâche.