2010-11-08 26 views
47

¿Cómo puedo abrir un archivo, Stud.txt, y luego reemplazar cualquier aparición de "A" por "Naranja"?Reemplazar cadena dentro del contenido del archivo

+2

favor (como siempre) siga [directrices cuestión general] (http://tinyurl.com/so-hints), estado de las restricciones especiales, muestran lo que Lo he intentado hasta ahora y pregunto qué es lo que específicamente te está confundiendo. –

+9

Por favor, también, marque su tarea con la etiqueta [tarea]. –

+0

relacionado: [¿Cómo buscar y reemplazar texto en un archivo usando Python?] (Http://stackoverflow.com/q/17140886/4279) – jfs

Respuesta

120
with open("Stud.txt", "rt") as fin: 
    with open("out.txt", "wt") as fout: 
     for line in fin: 
      fout.write(line.replace('A', 'Orange')) 
+8

@Blue - las pautas de tarea dicen no rechazar respuestas para preguntas de tarea. Especialmente los que son posiblemente legítimos. +1 para la forma correcta de hacer esto. – katrielalex

+6

"t" para el modo de texto es solo Python 3. Además, proporciona un administrador de contexto para su archivo de salida, pero no cierra el archivo de entrada, lo que parece inconsistente. –

+1

@katrielalex: No hay votos a la baja, simplemente no voté en contra. Pero dar respuestas a la tarea es [no es la forma correcta de hacerlo] (http://meta.stackexchange.com/questions/10811/how-to-ask-and-answer-homework-questions) –

5
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) 
10

Algo así como

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

<do stuff with the result> 
0

forma más fácil es hacerlo con expresiones regulares, suponiendo que desea iterar sobre cada línea en el archivo (donde se almacenaría 'A') que hacer ...

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) 
51

Si desea reemplazar las cuerdas en el mismo archivo, es probable que tenga que leer su contenido en un local de variables, cerrarlo y volver a abrirlo para escribir:

estoy usando the with statement en este ejemplo, que cierra el archivo después de que se termina el bloque with - ya sea normalmente cuando el último comando termina de ejecutar, 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 son diferentes, podríamos haber hecho esto más elegante con un solo with comunicado.

+0

Esta solución es mejor porque no cambia el nombre del archivo a diferencia de la respuesta anterior. –

+0

¿Por qué enjuaga() inmediatamente antes de cerrar()? Espero que close() haga cualquier enrojecimiento necesario. – ChrisPhoenix

+0

@ChrisPhoenix [Corregir] (http://stackoverflow.com/questions/2447143/does-close-imply-flush-in-python), podemos usar 'con' y deshacernos tanto de' close' como 'flush' . –

7
#!/usr/bin/python 

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

    with open(FileName, "w") as f: 
    f.write(newText) 
Cuestiones relacionadas