Les deux semblent fonctionner de manière identique mais il y a une accroche.
r+ :-
- Ouvrir le fichier pour Lecture et Ecriture
- Une fois ouvert, le pointeur de fichier pointera au début (0)
- Maintenant si vous voulez lire, cela commencera la lecture depuis le début
- Si vous voulez écrire, alors commencez à écrire, mais le processus d'écriture commencera à partir du pointeur 0. Donc il y aura écrasement de caractères, s'il y en a
- Dans ce cas, le fichier doit être présent, sinon une FileNotFoundError sera levée.
w+ :-
- Ouvrir le fichier pour Lecture et Ecriture
- Si le fichier existe, il sera ouvert et toutes les données seront effacées
- Si le fichier n'existe pas, alors un nouveau fichier sera créé
- Au début, le pointeur de fichier pointera au début (comme il n'y a pas de données)
- Maintenant si vous voulez écrire quelque chose, alors écrivez
- Le pointeur de fichier pointera maintenant à la fin du fichier (après le processus d'écriture)
- Si vous voulez lire les données maintenant, déplacez-vous vers un point spécifique (pour commencer : seek(0))
Donc, en résumé, les deux sont destinés à ouvrir le fichier pour lire et écrire mais la différence est si nous voulons effacer les données au début puis faire de la lecture/écriture ou simplement commencer tel quel.
abc.txt
- au début
1234567
abcdefg
0987654
1234
Code pour r+
with open('abc.txt', 'r+') as f: # abc.txt doit exister avant l'ouverture
print(f.tell()) # Doit donner ==> 0
f.write('abcd')
print(f.read()) # Le pointeur pointe vers l'index 3 => 4e position
f.write('Sunny') # Après la lecture, le pointeur est à la fin du fichier
Sortie
0
567
abcdefg
0987654
1234
abc.txt
- Après l'exécution:
abcd567
abcdefg
0987654
1234Sunny
Réinitialisation de abc.txt comme initial
Code pour w+
with open('abc.txt', 'w+') as f:
print(f.tell()) # Doit donner ==> 0
f.write('abcd')
print(f.read()) # Le pointeur pointe vers l'index 3 => 4e position
f.write('Sunny') # Après la lecture, le pointeur est à la fin du fichier
Sortie
0
abc.txt
- Après l'exécution:
abcdSunny
35 votes
J'ai trouvé ce diagramme très utile.