131 votes

Lire et écraser un fichier en Python

Actuellement, j'utilise 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 volumineux que le nouveau fichier. Je me retrouve donc avec un nouveau fichier qui comporte une partie de l'ancien fichier à la fin.

208voto

nosklo Points 75862

Si vous ne voulez pas fermer et rouvrir le fichier, pour éviter les conditions de concurrence, vous pouvez le tronquer:

 f = open(filename, 'r+')
text = f.read()
text = re.sub('foobar', 'bar', text)
f.seek(0)
f.write(text)
f.truncate()
f.close()
 

22voto

ghostdog74 Points 86060
import fileinput
for line in fileinput.FileInput("file",inplace=1):
    if "foobar" in line:
         line=line.replace("foobar","bar")
    print line

16voto

Il-Bhima Points 5757

Il serait probablement plus facile et plus astucieux de fermer le fichier après text = re.sub('foobar', 'bar', text) , de le rouvrir pour l'écriture (effaçant ainsi l'ancien contenu) et d'y écrire votre texte mis à jour.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X