Python >> Tutoriel Python >  >> Python

[Python One-Liners] Comment remplacer une chaîne dans un fichier depuis votre terminal ?

Problème :Vous utilisez Python dans un terminal et vous souhaitez remplacer une chaîne 'example' dans un fichier texte file.txt :

xxxxx example xxxxx

Votre objectif est d'accomplir le texte suivant :

xxxxx replaced_example xxxxx

En particulier, vous souhaitez ouvrir le fichier, remplacer le texte et réécrire le résultat dans le fichier, le tout sur une seule ligne de code Python !

Une ligne Python peut-elle accomplir cela ?

Répondre :Oui! Vous pouvez compresser n'importe quel script Python en une seule ligne. Pour les nerds de l'informatique :la seule ligne de code Python est Turing complète .

Voyons comment vous pouvez accomplir cette tâche en tant que Python one-liner !

Méthode 1 :Imprimer vers l'entrée standard

La première méthode est la meilleure si vous souhaitez remplacer toutes les occurrences de "example" avec "replaced_example" et imprimez le résultat sur l'entrée standard.

python -c "print(open('file.txt').read().replace('example','replaced_example'))"

La méthode replace remplace toutes les occurrences du premier argument par le second argument. Il renvoie la nouvelle chaîne. Vous pouvez maintenant imprimer le résultat sur le stdin ou le réécrire dans un fichier.

Méthode 2 :Imprimer dans un fichier

La deuxième méthode est la meilleure si vous souhaitez remplacer toutes les occurrences de "example" avec "replaced_example" et écrire le résultat dans un nouveau fichier "file2.txt" .

python -c "print(open('file.txt').read().replace('example','replaced_example'), file=open('file2.txt', 'w'))"

La méthode replace remplace toutes les occurrences du premier argument par le second argument. Il renvoie la nouvelle chaîne. Vous pouvez maintenant imprimer le résultat dans le fichier au moyen du file argument de la fonction d'impression.

Méthode 3 :exec()

Vous pouvez toujours convertir une multiligne en une seule ligne à l'aide de la fonction exec(). Supposons que vous disposiez du script multiligne suivant pour remplacer toutes les occurrences d'une chaîne dans un fichier :

with open('file.txt', 'r') as f:
    s = f.read().replace('example', 'replaced_example')
with open('file.txt', 'w') as f:
    f.write(s)

Vous ouvrez d'abord le fichier en mode lecture en lisant tout son contenu et en créant la nouvelle chaîne avec les occurrences remplacées de la chaîne 'example' . Après cela, vous ouvrez le fichier en mode écriture pour écraser son contenu.

Vous utilisez le exec() fonction pour unifier ce script :

exec("with open('file.txt', 'r') as f:\n    s = f.read().replace('example', 'replaced_example')\nwith open('file.txt', 'w') as f:\n    f.write(s)")

Tout ce que vous avez fait est de remplacer les nouvelles lignes par le caractère de nouvelle ligne \n . Ce script résultant est un one-liner pas si concis pour remplacer tout le contenu d'un fichier donné !