Dans le python intégré ouvert fonction, quelle est la différence exacte entre les modes w
, a
, w+
, a+
, et r+
?
En particulier, la documentation implique que tout cela permettra d'écrire dans le fichier, et dit qu'elle ouvre les fichiers pour "ajouter", "écrire" et "mettre à jour" spécifiquement, mais ne définit pas la signification de ces termes.
Réponses:
Les modes d'ouverture sont exactement les mêmes que ceux de la fonction de la bibliothèque standard C
fopen()
.La
fopen
page de manuel BSD les définit comme suit:la source
w
et lesw+
deux peuvent faireThe file is created if it does not exist
b
annexe au mode ouvre le fichier en mode binaire, donc il y a aussi des modes tels querb
,wb
etr+b
. Python sur Windows fait une distinction entre les fichiers texte et binaires; les caractères de fin de ligne dans les fichiers texte sont automatiquement légèrement modifiés lorsque les données sont lues ou écrites.+
ne fait pas quelque chose de cohérent indépendant s'il l'esta
,w
our
? Ou est-ce que je ne vois pas le motif? Quel est le motif?J'ai remarqué que de temps en temps, je dois à nouveau ouvrir Google, juste pour construire une image mentale des principales différences entre les modes. J'ai donc pensé qu'un diagramme sera plus rapide à lire la prochaine fois. Peut-être que quelqu'un d'autre trouvera cela utile aussi.
la source
a
description est fausse . Les écritures sont toujours positionnées à la fin.Subsequent writes to the file will always end up at the then current end of file, irrespective of any intervening fseek(3) or similar
qui est un peu plus forte que de simplement dire que la position initiale est la fin.Même information, juste sous forme de tableau
où les significations sont: (juste pour éviter toute mauvaise interprétation)
écriture - l'écriture dans un fichier est autorisée
create - le fichier est créé s'il n'existe pas encore
trunctate - lors de l'ouverture du fichier, il est rendu vide (tout le contenu du fichier est effacé)
position au début - après l'ouverture du fichier, la position initiale est définie au début du fichier
Remarque:
a
eta+
toujours ajouter à la fin du fichier - ignore tous lesseek
mouvements.BTW. comportement intéressant au moins sur mon win7 / python2.7, pour un nouveau fichier ouvert en
a+
mode:write('aa'); seek(0, 0); read(1); write('b')
- le secondwrite
est ignoréwrite('aa'); seek(0, 0); read(2); write('b')
- le secondwrite
soulèveIOError
la source
open(file,'a'); close(); open(file,'r+')
pour accomplir cela.a
et lesa+
écritures se produiront toujours à la fin du fichier, que l'on déplace manuellement le pointeur à l'aide deseek()
.Les options sont les mêmes que pour la fonction fopen dans la bibliothèque standard C:
w
tronque le fichier, écrase tout ce qui était déjà làa
ajoute au fichier, ajoutant à tout ce qui était déjà làw+
s'ouvre pour la lecture et l'écriture, tronquant le fichier mais vous permettant également de relire ce qui a été écrit dans le fichiera+
s'ouvre pour l'ajout et la lecture, vous permettant à la fois d'ajouter au fichier et de lire son contenula source
Je pense que c'est important à considérer pour l'exécution multiplateforme, c'est-à-dire en tant que CYA. :)
Ceci est directement cité de Python Software Foundation 2.7.x .
la source
Je l'ai découvert en essayant de comprendre pourquoi vous utiliseriez le mode «w +» par rapport à «w». Au final, je viens de faire quelques tests. Je ne vois pas beaucoup d'intérêt pour le mode 'w +', car dans les deux cas, le fichier est tronqué pour commencer. Cependant, avec le «w +», vous pouviez lire après avoir écrit en cherchant en retour. Si vous tentiez une lecture avec «w», cela déclencherait une erreur IOError. La lecture sans utiliser la recherche avec le mode 'w +' ne produira rien, car le pointeur de fichier sera là où vous avez écrit.
la source