Python >> Tutoriel Python >  >> Python

Comment modifier un fichier texte en Python ?

Résumé : Vous pouvez modifier un fichier texte en Python en utilisant l'une des méthodes suivantes :

  • Utilisation du seek() Méthode
  • Utilisation du fileinput Module
  • Utilisation du  splitlines()  Méthode
  • Utiliser le regex module et le split() et insert() méthodes

Aperçu

Problème :Étant donné un fichier texte ; comment le modifier en Python ?

Scénario 1 : Insérer une nouvelle ligne dans le fichier

Considérez que vous avez le fichier texte suivant qui répertorie certains sites Web et que vous souhaitez insérer un autre site Web (chaîne) dans une nouvelle ligne dans le fichier.

Fichier donné :

test.txtTélécharger

Vous avez l'intention d'insérer, "Freelancer.com" dans la liste donnée dans le fichier ci-dessus sans supprimer le fichier.

Scénario 2 : Insérer une nouvelle phrase dans la même ligne

Dans l'exemple précédent, vous vouliez insérer une chaîne dans une nouvelle ligne, et si vous vouliez insérer une nouvelle chaîne à un certain endroit dans un paragraphe indépendamment des lignes. Par exemple, vous avez un fichier avec les phrases suivantes comme indiqué ci-dessous :

Peter Piper picked a peck of pickled peppers.A peck of pickled peppers Peter Piper picked.Wheres the peck of pickled peppers Peter Piper picked.

Vous souhaitez insérer une nouvelle phrase (par exemple :Si Peter Piper a choisi un pic de poivrons marinés ) après la deuxième phrase. Ainsi, la sortie souhaitée est :

Peter Piper picked a peck of pickled peppers.A peck of pickled peppers Peter Piper picked.If Peter Piper picked a peck of pickled peppers.Wheres the peck of pickled peppers Peter Piper picked.

Alors, comment allez-vous accomplir les tâches ci-dessus ? ?

Avant de poursuivre, veuillez noter que :

Vous ne pouvez pas insérer une chaîne au milieu d'un fichier sans la réécrire. Vous pouvez ajouter un fichier ou en écraser une partie à l'aide de la méthode seek() dans laquelle nous nous plongerons plus tard ; mais si vous souhaitez ajouter quelque chose au début ou au milieu du fichier, vous devrez le réécrire. Aussi simple que cela! ? C'est complètement une chose du système d'exploitation et n'a rien à voir avec Python. C'est le cas dans toutes les langues.

Par conséquent, la meilleure pratique est :

  • lire à partir du fichier,
  • apporter les modifications nécessaires,
  • écrivez-le dans un nouveau fichier (par exemple "mon_fichier.txt.tmp") . C'est bien mieux que de lire le fichier entier dans la mémoire, surtout si le fichier est volumineux.
  • Une fois le fichier temporaire terminé, renommez-le avec le même nom que le fichier d'origine.

C'est un moyen efficace et sûr de le faire car si, pour une raison quelconque, l'écriture du fichier se bloque ou s'interrompt, vous avez toujours votre fichier d'origine intact.

Maintenant que nous avons une compréhension claire du problème et de la bonne approche pour apporter les modifications, plongeons-nous dans les solutions et découvrons comment nous pouvons implémenter notre concept en Python !

Solutions au scénario 1

❒ Méthode 1 :Utilisation de la méthode seek()

⁕ Définition et utilisation de la méthode seek()

seek() est une méthode de fichier Python qui vous permet de définir la position actuelle du fichier dans un flux de fichiers. Il renvoie également la nouvelle position.

Syntaxe :

Utilisons le seek() méthode pour modifier notre fichier.

⁕ La solution

Cas 1 :ajout au milieu du fichier.

with open('test.txt', 'r+') as f:
    file = f.readlines()
    for line in file:
        if 'Upwork' in line:
            pos = line.index('Upwork')
            file.insert(pos + 1, 'Freelancer.com\n')
    f.seek(0)
    f.writelines(file)
f.close()

Sortie :

Cas 2 :Ajout à la fin du fichier

Si vous souhaitez simplement ajouter au fichier, tout ce que vous avez à faire est d'ouvrir le fichier dans ajouter mode et insérez la chaîne requise.

with open('test.txt', 'a') as f:
    f.write('\nFreelancer.com')

Sortie :

Cas 3 :Ajouter au début du fichier

with open('test.txt', 'r+') as f:
    file = f.readlines()
    file.insert(0,'Freelancer.com\n')
    f.seek(0)
    f.writelines(file)

Sortie

❒ Méthode 2 :Utilisation du module fileinput

Une autre solution de contournement pour modifier un fichier est que vous pouvez utiliser le fileinput module de la bibliothèque standard Python qui permet de réécrire un fichier en définissant le inplace argument de mot-clé comme inplace=true .

import fileinput

f = fileinput.input('test.txt', inplace=true)
for n, line in enumerate(f, start=1):
    if line.strip() == 'Finxter':
        print('Freelancer.com')
    print(line, end='')

Sortie :

❒ Méthode 3 :Utilisation de la méthode splitlines()

splitlines() est une méthode en Python qui est utilisée pour diviser une chaîne de rupture aux limites de ligne. Il renvoie une liste des lignes, s'interrompant aux limites des lignes.

with open('test.txt', 'r+') as infile:
    data = infile.read()  # Read the contents of the file into memory.
    # Return a list of the lines, breaking at line boundaries.
    li = data.splitlines()
    index = li.index('Upwork')+1
    li.insert(index,'Freelancer.com')
    infile.seek(0)
    for item in li:
        infile.writelines(item+'\n')

Sortie :

La solution au scénario 2

Voyons maintenant rapidement la solution à notre deuxième scénario dans lequel nous allons insérer une nouvelle phrase, quel que soit le numéro de ligne. Une solution simple à ce problème consiste à diviser les phrases avec un point comme séparateur et à stocker également le séparateur avec les textes. Ensuite, vous pouvez insérer la phrase supplémentaire dans l'espace requis et enfin l'écrire dans le fichier.

import re

f = open("demo.txt", "r+")
contents = f.read()
text = re.split('([.])', contents)
text.insert(4, 'If Peter Piper picked a peck of pickled peppers.')
f.seek(0)
f.writelines(text)
f.close()

Sortie :

Peter Piper picked a peck of pickled peppers.A peck of pickled peppers Peter Piper picked.If Peter Piper picked a peck of pickled peppers.Wheres the peck of pickled peppers Peter Piper picked.

Vous voudrez peut-être jeter un œil à un autre scénario décrit dans l'article suivant :

Comment rechercher et remplacer une ligne dans un fichier en Python ?

Conclusion

Dans cet article, nous avons expliqué comment modifier un fichier en Python à l'aide de quelques scénarios. Nous avons utilisé les méthodes suivantes pour parvenir à notre solution finale :

  • Utilisation de la méthode seek()
  • Utilisation du module fileinput
  • Utilisation de la méthode splitlines()
  • Utilisation du module regex et des méthodes split() et insert()

Avec cela, nous arrivons à la fin de cet article et j'espère que vous pourrez facilement modifier des fichiers en Python après avoir lu cet article ! Veuillez rester à l'écoute et abonnez-vous pour des articles et des discussions plus intéressants.