Como posso abrir um arquivo Stud.txt e, em seguida, substituir qualquer ocorrência de "A" por "Laranja"?
Como posso abrir um arquivo Stud.txt e, em seguida, substituir qualquer ocorrência de "A" por "Laranja"?
Respostas:
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 você quiser substituir as strings no mesmo arquivo, provavelmente terá que ler seu conteúdo em uma variável local, fechá-la e reabri-la para gravação:
Estou usando a instrução with neste exemplo, que fecha o arquivo depois que o with
bloco é encerrado - normalmente quando o último comando termina de ser executado ou por uma exceção.
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 ressaltar que se os nomes dos arquivos fossem diferentes, poderíamos ter feito isso de forma mais elegante com um único with
comando.
#!/usr/bin/python
with open(FileName) as f:
newText=f.read().replace('A', 'Orange')
with open(FileName, "w") as f:
f.write(newText)
Algo como
file = open('Stud.txt')
contents = file.read()
replaced_contents = contents.replace('A', 'Orange')
<do stuff with the result>
Se você estiver no Linux e quiser apenas substituir a palavra dog
por, cat
pode fazer:
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
Resultado:
Hi, i am a cat and cat's are awesome, i love cats! cat cat cats!
Postagem original: /ubuntu/20414/find-and-replace-text-within-a-file-using-commands
Usando 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 os arquivos de entrada e saída fossem diferentes, você usaria duas variáveis diferentes para read_text
e write_text
.
Se você quisesse uma mudança mais complexa do que uma única substituição, você atribuiria o resultado de read_text
a uma variável, processaria e salvaria o novo conteúdo em outra variável e, em seguida, salvaria o novo conteúdo com write_text
.
Se o seu arquivo for grande, você prefere uma abordagem que não leia todo o arquivo na memória, mas que o processe linha por linha, conforme mostrado por Gareth Davidson em outra resposta ( https://stackoverflow.com/a/4128192/3981273 ) , que obviamente requer o uso de dois arquivos distintos para entrada e saída.
maneira mais fácil é fazer isso com expressões regulares, supondo que você deseja iterar em cada linha do arquivo (onde 'A' seria armazenado), você faz ...
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)