Existe-t-il un moyen d'ouvrir un fichier en lecture et en écriture?
Pour contourner ce problème, j'ouvre le fichier pour l'écriture, le ferme, puis l'ouvre à nouveau pour la lecture. Mais est - il un moyen d'ouvrir un fichier pour les deux lecture et l' écriture?
mmap
mmap
est une excellente idée, mais que faire si vous devez gérer la concurrence? Existe-t-il un moyen de réserver l'accès?Réponses:
Voici comment lire un fichier, puis y écrire (en écrasant toutes les données existantes), sans fermer ni rouvrir:
la source
a+
pour couvrir le cas final que le fichier n'existe pas (sera créé)a
états «sur certains systèmes Unix, signifie que toutes les écritures s'ajoutent à la fin du fichier quelle que soit la position de recherche actuelle». Dans ce cas, lef.seek(0)
ne fonctionnera pas comme prévu. Je viens de tomber sous le coup de Linux.seek
ettruncate
est utilisé ici. La plupart des lecteurs viennent de Google et font du copier-coller.seek(0)
fait: il place le fp en position0
( c'est -à- dire le début).truncate()
tronquer le fichier au nombre d'octets fourni, c'est -à- dire supprimer tout le contenu du fichier après le nombre d'octets spécifié. Imaginez que votre fichier ait la chaîneHello, world
et que vous écrivezBye
. Si vous netruncate()
le faites pas, le contenu sera à la finByelo, world
, car vous n'avez jamais supprimé le texte qui existait dans le fichier.truncate()
tronque le fichier au fp actuel.r+
est le mode canonique pour lire et écrire en même temps. Ce n'est pas différent de l'utilisation de l'fopen()
appel système carfile()
/open()
n'est qu'un minuscule wrapper autour de cet appel de système d'exploitation.la source
Résumer les comportements d'E / S
et la branche décision
la source
J'ai essayé quelque chose comme ça et cela fonctionne comme prévu:
Où:
Et:
Aussi, si vous ouvrez un didacticiel Python sur la lecture et l'écriture de fichiers vous constaterez que:
la source
truncate
méthode pour arrêter cela.