web-dev-qa-db-fra.com

Remplacer la chaîne dans le contenu du fichier

Comment puis-je ouvrir un fichier, Stud.txt, puis remplacer toutes les occurrences de "A" par "Orange"?

81
Joey

Vous devez ouvrir le fichier d'entrée (mode de lecture) et écrire dans un fichier de sortie (mode d'écriture). Pendant l’écriture dans le fichier de sortie, utilisez la fonction replace. Ensuite, renommez le fichier pour conserver le nom de fichier comme suit:

import os    

file_in = "Stud.txt"
file_out = "tmp.txt"
with open(file_in, "rt") as fin:
    with open(file_out, "wt") as fout:
        for line in fin:
            fout.write(line.replace('A', 'Orange'))

os.rename(file_out, file_in)

Si vous souhaitez conserver le nom du fichier, écrivez simplement dans un fichier temporaire et écrasez ensuite le fichier d'origine. Si ce doit être un fichier séparé, laissez simplement le os.rename commande et ça devrait aller.

161
Gareth Davidson

Si vous souhaitez remplacer les chaînes dans le même fichier, vous devez probablement en lire le contenu dans une variable locale, la fermer et la rouvrir pour écriture:

J'utilise l'instruction with dans cet exemple, qui ferme le fichier après la fin du bloc with - soit normalement à la fin de l'exécution de la dernière commande, soit par une exception.

def inplace_change(filename, old_string, new_string):
    # Safely read the input filename using 'with'
    with open(filename) as f:
        s = f.read()
        if old_string not in s:
            print('"{old_string}" not found in {filename}.'.format(**locals()))
            return

    # Safely write the changed content, if found in the file
    with open(filename, 'w') as f:
        s = f.read()
        print('Changing "{old_string}" to "{new_string}" in {filename}'.format(**locals()))
        s = s.replace(old_string, new_string)
        f.write(s)

Il est à noter que si les noms de fichiers étaient différents, nous aurions pu le faire plus élégamment avec une seule instruction with.

70
Adam Matan
  #!/usr/bin/python

  with open(FileName) as f:
    newText=f.read().replace('A', 'Orange')

  with open(FileName, "w") as f:
    f.write(newText)
32
Mark Kahn

Quelque chose comme

file = open('Stud.txt')
contents = file.read()
replaced_contents = contents.replace('A', 'Orange')

<do stuff with the result>
9
TartanLlama

Si vous êtes sur linux et que vous voulez juste remplacer le Word dog par catvous pouvez faire:

text.txt:

Hi, i am a dog and dog's are awesome, i love dogs! dog dog dogs!

Commande Linux:

sed -i 's/dog/cat/g' test.txt

Sortie:

Hi, i am a cat and cat's are awesome, i love cats! cat cat cats!

Message original: https://askubuntu.com/questions/20414/find-and-replace-text-within-a-file-using-commands

6
user1767754
with open('Stud.txt','r') as f:
    newlines = []
    for line in f.readlines():
        newlines.append(line.replace('A', 'Orange'))
with open('Stud.txt', 'w') as f:
    for line in newlines:
        f.write(line)
6
Falmarri

le moyen le plus simple est de le faire avec des expressions régulières, en supposant que vous souhaitiez effectuer une itération sur chaque ligne du fichier (où "A" serait stocké) ...

import re

input = file('C:\full_path\Stud.txt), 'r')
#when you try and write to a file with write permissions, it clears the file and writes only #what you tell it to the file.  So we have to save the file first.

saved_input
for eachLine in input:
    saved_input.append(eachLine)

#now we change entries with 'A' to 'Orange'
for i in range(0, len(old):
    search = re.sub('A', 'Orange', saved_input[i])
    if search is not None:
        saved_input[i] = search
#now we open the file in write mode (clearing it) and writing saved_input back to it
input = file('C:\full_path\Stud.txt), 'w')
for each in saved_input:
    input.write(each)
0
austinbv