Come posso aprire un file, Stud.txt, e quindi sostituire le occorrenze di "A" con "Orange"?
Come posso aprire un file, Stud.txt, e quindi sostituire le occorrenze di "A" con "Orange"?
Risposte:
with open("Stud.txt", "rt") as fin:
with open("out.txt", "wt") as fout:
for line in fin:
fout.write(line.replace('A', 'Orange'))
Se desideri sostituire le stringhe nello stesso file, probabilmente devi leggerne il contenuto in una variabile locale, chiuderla e riaprirla per la scrittura:
Sto usando l'istruzione with in questo esempio, che chiude il file dopo che il with
blocco è terminato, normalmente quando l'ultimo comando termina l'esecuzione o per un'eccezione.
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:
print('Changing "{old_string}" to "{new_string}" in {filename}'.format(**locals()))
s = s.replace(old_string, new_string)
f.write(s)
Vale la pena ricordare che se i nomi dei file fossero diversi, avremmo potuto farlo in modo più elegante con una singola with
dichiarazione.
#!/usr/bin/python
with open(FileName) as f:
newText=f.read().replace('A', 'Orange')
with open(FileName, "w") as f:
f.write(newText)
Qualcosa di simile a
file = open('Stud.txt')
contents = file.read()
replaced_contents = contents.replace('A', 'Orange')
<do stuff with the result>
Se sei su Linux e vuoi solo sostituire la parola dog
con cat
puoi fare:
text.txt:
Hi, i am a dog and dog's are awesome, i love dogs! dog dog dogs!
Comando Linux:
sed -i 's/dog/cat/g' test.txt
Produzione:
Hi, i am a cat and cat's are awesome, i love cats! cat cat cats!
Post originale: /ubuntu/20414/find-and-replace-text-within-a-file-using-commands
Utilizzando pathlib ( https://docs.python.org/3/library/pathlib.html )
from pathlib import Path
file = Path('Stud.txt')
file.write_text(file.read_text().replace('A', 'Orange'))
Se i file di input e di output fossero diversi, useresti due variabili diverse per read_text
e write_text
.
Se si desidera una modifica più complessa di una singola sostituzione, assegnare il risultato di read_text
a una variabile, elaborarla e salvare il nuovo contenuto su un'altra variabile, quindi salvare il nuovo contenuto con write_text
.
Se il tuo file fosse di grandi dimensioni, preferiresti un approccio che non legga l'intero file in memoria, ma piuttosto lo elabori riga per riga come mostrato da Gareth Davidson in un'altra risposta ( https://stackoverflow.com/a/4128192/3981273 ) , che ovviamente richiede l'utilizzo di due file distinti per l'input e l'output.
Il modo più semplice è farlo con espressioni regolari, assumendo che tu voglia iterare su ogni riga del file (dove sarebbe memorizzata 'A') che fai ...
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)