Dans la fonction intégrée [open][1] de python, quelle est la différence exacte entre les modes w
, a
, w+
, a+
, et r+
?
En particulier, la documentation implique que tous ces modes permettent d'écrire dans le fichier, et dit qu'il ouvre les fichiers pour "appending" ;, "writing" ;, et "updating" ; spécifiquement, mais ne définit pas ce que ces termes signifient.
Les modes d'ouverture sont exactement les mêmes que ceux de la fonction de la bibliothèque standard C fopen()
.
[La page de manuel BSD fopen
][1] les définit comme suit :
The argument mode points to a string beginning with one of the following
sequences (Additional characters may follow these sequences.):
``r'' Open text file for reading. The stream is positioned at the
beginning of the file.
``r+'' Open for reading and writing. The stream is positioned at the
beginning of the file.
``w'' Truncate file to zero length or create text file for writing.
The stream is positioned at the beginning of the file.
``w+'' Open for reading and writing. The file is created if it does not
exist, otherwise it is truncated. The stream is positioned at
the beginning of the file.
``a'' Open for writing. The file is created if it does not exist. The
stream is positioned at the end of the file. Subsequent writes
to the file will always end up at the then current end of file,
irrespective of any intervening fseek(3) or similar.
``a+'' Open for reading and writing. The file is created if it does not
exist. The stream is positioned at the end of the file. Subse-
quent writes to the file will always end up at the then current
end of file, irrespective of any intervening fseek(3) or similar.
Les options sont les mêmes que pour la fonction fopen de la bibliothèque standard C :
w
tronque le fichier, écrasant ce qui s'y trouvait déjà.
a
ajoute au fichier, en ajoutant ce qui s'y trouvait déjà.
w+
ouvre le fichier en lecture et en écriture, en le tronquant mais aussi en vous permettant de relire ce qui a été écrit dans le fichier.
a+
ouvre pour l'ajout et la lecture, vous permettant à la fois d'ajouter au fichier et de lire son contenu.
J'ai trouvé ceci en essayant de comprendre pourquoi vous utilisiez le mode 'w+' ; plutôt que 'w' ;. Finalement, j'ai juste fait quelques tests. Je ne vois pas l'utilité du mode 'w+' ;, car dans les deux cas, le fichier est tronqué dès le départ. Cependant, avec le mode 'w+' ;, vous pouviez lire après avoir écrit en cherchant en arrière. Si vous essayez de lire avec le mode 'w' ;, vous obtiendrez une erreur IOError. La lecture sans utiliser la recherche avec le mode 'w+' ; ne donnera rien, puisque le pointeur de fichier se trouvera après l'endroit où vous avez écrit.