2010-11-08 11 views
47

Come posso aprire un file, Stud.txt, e quindi sostituire qualsiasi occorrenza di "A" con "Arancione"?Sostituisci stringa all'interno del contenuto del file

+2

prega (come sempre) seguire [linee guida questione generale] (http://tinyurl.com/so-hints), stato di eventuali restrizioni particolari, mostrano ciò che si hai provato fino ad ora e chiedi in che cosa ti confondi in modo specifico. –

+9

Per favore, segna anche i tuoi compiti con il tag [homework]. –

+0

correlati: [Come cercare e sostituire il testo in un file usando Python?] (Http://stackoverflow.com/q/17140886/4279) – jfs

risposta

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 - le linee guida per i compiti a casa dicono di non deviare le risposte per le domande sui compiti. Soprattutto quelli che sono probabilmente legittimi. +1 per il modo giusto per farlo. – katrielalex

+6

"t" per la modalità testo è solo Python 3. Inoltre, fornisci un gestore di contesto per il tuo file di output, ma non riesci a chiudere il file di input, il che sembra incoerente. –

+1

@katrielalex: non ci sono downvote, semplicemente non ho votato. Ma dare risposte ai compiti è [non è il modo giusto per farlo] (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

Qualcosa di simile

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

<do stuff with the result> 
0

modo più semplice è quello di farlo con le espressioni regolari, partendo dal presupposto che si desidera iterare su ogni riga del file (dove sarebbe stato memorizzato 'A') si ...

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

Se si desidera sostituire le stringhe nello stesso file, è necessario leggerne il contenuto in un locale variabile, chiuderlo e riaprirlo in scrittura:

sto usando the with statement in questo esempio, che chiude il file dopo il blocco with termina - sia normalmente quando l'ultimo comando termina l'esecuzione, o da 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 erano diversi, avremmo potuto fare questo più elegantemente con un singolo with dichiarazione.

+0

Questa soluzione è migliore perché non si rinomina il file a differenza della risposta di cui sopra. –

+0

Perché flush() immediatamente prima di close()? Mi auguro che close() faccia tutto il flush necessario. – ChrisPhoenix

+0

@ChrisPhoenix [Correct] (http://stackoverflow.com/questions/2447143/does-close-imply-flush-in-python), possiamo usare 'with' e sbarazzarci di' close' e ​​'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) 
Problemi correlati