Comment puis-je ouvrir un fichier, Stud.txt, puis remplacer toutes les occurrences de "A" par "Orange"?
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.
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
.
#!/usr/bin/python
with open(FileName) as f:
newText=f.read().replace('A', 'Orange')
with open(FileName, "w") as f:
f.write(newText)
Quelque chose comme
file = open('Stud.txt')
contents = file.read()
replaced_contents = contents.replace('A', 'Orange')
<do stuff with the result>
Si vous êtes sur linux et que vous voulez juste remplacer le Word dog
par cat
vous 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
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)
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)