Basé sur la réponse de Thomas Watnedal. Cependant, cela ne répond pas exactement à la partie ligne à ligne de la question initiale. La fonction peut toujours remplacer, ligne par ligne, les éléments suivants
Cette mise en œuvre remplace le contenu du fichier sans utiliser de fichiers temporaires, par conséquent, les autorisations de fichiers restent inchangées.
De même, re.sub au lieu de replace, permet le remplacement par regex au lieu du remplacement par texte brut uniquement.
La lecture du fichier en tant que chaîne unique plutôt que ligne par ligne permet une correspondance et un remplacement multilignes.
import re
def replace(file, pattern, subst):
# Read contents from file as a single string
file_handle = open(file, 'r')
file_string = file_handle.read()
file_handle.close()
# Use RE package to allow for replacement (also allowing for (multiline) REGEX)
file_string = (re.sub(pattern, subst, file_string))
# Write contents to file.
# Using mode 'w' truncates the file.
file_handle = open(file, 'w')
file_handle.write(file_string)
file_handle.close()