¿Cómo puedo abrir un archivo, Stud.txt, y luego reemplazar cualquier aparición de "A" con "Orange"?
¿Cómo puedo abrir un archivo, Stud.txt, y luego reemplazar cualquier aparición de "A" con "Orange"?
Respuestas:
with open("Stud.txt", "rt") as fin:
with open("out.txt", "wt") as fout:
for line in fin:
fout.write(line.replace('A', 'Orange'))
Si desea reemplazar las cadenas en el mismo archivo, probablemente deba leer su contenido en una variable local, cerrarlo y volver a abrirlo para escribir:
Estoy usando la declaración with en este ejemplo, que cierra el archivo después de with
que se termina el bloque, ya sea normalmente cuando el último comando termina de ejecutarse o por una excepción.
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 mencionar que si los nombres de archivo fueran diferentes, podríamos haberlo hecho de manera más elegante con una sola with
declaración.
#!/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>
Si está en Linux y solo desea reemplazar la palabra dog
con cat
, puede hacer:
text.txt:
Hi, i am a dog and dog's are awesome, i love dogs! dog dog dogs!
Comando de Linux:
sed -i 's/dog/cat/g' test.txt
Salida:
Hi, i am a cat and cat's are awesome, i love cats! cat cat cats!
Publicación 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'))
Si los archivos de entrada y salida fueran diferentes, usaría dos variables diferentes para read_text
y write_text
.
Si desea un cambio más complejo que un solo reemplazo, debe asignar el resultado de read_text
a una variable, procesarlo y guardar el nuevo contenido en otra variable, y luego guardar el nuevo contenido con write_text
.
Si su archivo era grande, preferiría un enfoque que no lea todo el archivo en la memoria, sino que lo procese línea por línea como lo muestra Gareth Davidson en otra respuesta ( https://stackoverflow.com/a/4128192/3981273 ) , que por supuesto requiere el uso de dos archivos distintos para entrada y salida.
La forma más fácil es hacerlo con expresiones regulares, asumiendo que desea iterar sobre cada línea en el archivo (donde se almacenaría 'A') lo hace ...
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)