73 votes

Comment modifier un fichier texte en Python ?

J'utilise Python et je voudrais insérer une chaîne de caractères dans un fichier texte sans effacer ou copier le fichier. Comment puis-je le faire ?

2voto

Maxime R. Points 51

Comme l'a mentionné Adam, vous devez prendre en compte les limitations de votre système avant de décider de l'approche à adopter, à savoir si vous avez assez de mémoire pour tout lire en mémoire, en remplacer certaines parties et le réécrire.

Si vous avez affaire à un petit fichier ou si vous n'avez pas de problèmes de mémoire, cela peut vous aider :

Option 1) Lire le fichier entier en mémoire, faire une substitution regex sur la totalité ou une partie de la ligne et la remplacer par cette ligne plus la ligne supplémentaire. Vous devrez vous assurer que la "ligne du milieu" est unique dans le fichier ou si vous avez des horodatages sur chaque ligne, cela devrait être assez fiable.

# open file with r+b (allow write and binary mode)
f = open("file.log", 'r+b')   
# read entire content of file into memory
f_content = f.read()
# basically match middle line and replace it with itself and the extra line
f_content = re.sub(r'(middle line)', r'\1\nnew line', f_content)
# return pointer to top of file so we can re-write the content with replaced string
f.seek(0)
# clear file content 
f.truncate()
# re-write the content with the updated content
f.write(f_content)
# close file
f.close()

Option 2) Trouvez la ligne du milieu, et remplacez-la par cette ligne plus la ligne supplémentaire.

# open file with r+b (allow write and binary mode)
f = open("file.log" , 'r+b')   
# get array of lines
f_content = f.readlines()
# get middle line
middle_line = len(f_content)/2
# overwrite middle line
f_content[middle_line] += "\nnew line"
# return pointer to top of file so we can re-write the content with replaced string
f.seek(0)
# clear file content 
f.truncate()
# re-write the content with the updated content
f.write(''.join(f_content))
# close file
f.close()

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