← retour aux snippets

fileinput: édition en place avec sauvegarde

Remplacer du texte dans un fichier en créant un .bak automatiquement.

python filesystem #fileinput#inplace#text

objectif

Remplacer du texte dans un fichier en créant un .bak automatiquement.

code minimal

import fileinput, tempfile, pathlib, sys

with tempfile.TemporaryDirectory() as tmp:
    p = pathlib.Path(tmp) / "conf.txt"
    p.write_text("host=localhost\n", encoding="utf-8")
    backup = str(p) + ".bak"
    # inplace redirige print() vers le même fichier
    for line in fileinput.input(files=[str(p)], inplace=True, backup=".bak"):
        if line.startswith("host="):
            line = "host=example.org\n"
        print(line, end="")
    changed = p.read_text(encoding="utf-8").strip()
    print(changed == "host=example.org")  # attendu: True

utilisation

print(True)

variante(s) utile(s)

import fileinput
# Traitement multi-fichiers
print(hasattr(fileinput, "input"))

notes

  • Avec inplace=True, tout ce qui est imprimé va dans le fichier d’origine.
  • backup permet de restaurer facilement.