Lire et écraser un fichier en Python
Actuellement, je suis en utilisant ceci:
f = open(filename, 'r+')
text = f.read()
text = re.sub('foobar', 'bar', text)
f.seek(0)
f.write(text)
f.close()
Mais le problème est que l'ancien fichier est plus grand que le nouveau fichier. Donc je me retrouve avec un fichier qui a une partie de l'ancien fichier sur la fin.
Vous devez vous connecter pour publier un commentaire.
Si vous ne voulez pas fermer et rouvrir le fichier, afin d'éviter des conditions de course, vous pourriez
truncate
c':La fonctionnalité peut également être plus propre et plus sûr à l'aide de
with open as
par mVChr du commentaire, qui est la volonté de fermer le gestionnaire, même si une erreur se produit.f.write(text)
aprèsf.truncate()
?f.truncate()
dans ce code, il écrit latext
premier, donc après.write()
le fichier curseur est positionné à la fin detext
. De procéder à tronquer le fichier de supprimer tout ce qui reste d'octets du fichier peut avoir après ce point. Dans ce cas, le résultat final serait le même que si vous tronquée avant d'écrire.Qu'il serait probablement plus facile et plus propre pour fermer le fichier après
text = re.sub('foobar', 'bar', text)
, de l'ouvrir à nouveau pour l'écriture (et donc de compensation de l'ancien contenu), et écrire votre texte mis à jour à elle.La
fileinput
module dispose d'uninline
mode pour l'écriture des modifications sur le fichier en cours de traitement sans l'aide de fichiers temporaires etc. Le module joliment encapsule l'exploitation commune de boucler sur les lignes dans une liste de fichiers, via un objet de façon transparente qui assure le suivi du nom de fichier, numéro de ligne, etc si vous voulez inspecter l'intérieur de la boucle.Essaie de l'écrire dans un nouveau fichier..