2010-11-08 21 views
47

Bir dosyayı nasıl açabilirim, Stud.txt ve sonra "Turuncu" ile "A" nın tüm oluşumlarını nasıl değiştirebilirim?İçindekileri dizinin içine değiştirme İçindekiler

+2

(her zaman olduğu gibi) takip ediniz [genel soru yönergeleri] (http://tinyurl.com/so-hints), devlet herhangi bir özel kısıtlama, ne göstermek sen Şimdiye kadar denedim ve özellikle neyin kafa karıştırıcı olduğunu sor. –

+9

Lütfen, ödevinizi [ev ödevi] etiketiyle işaretleyin. –

+0

related: [Python kullanarak bir dosyada metin nasıl aranır ve değiştirilir?] (Http://stackoverflow.com/q/17140886/4279) – jfs

cevap

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 - ev ödevi kılavuzları ev ödevi soruları için cevapları düşürmemeyi söyler. Özellikle de bunun gibi olanlar muhtemelen meşrudur. Bunu yapmanın doğru yolu için +1. Metin modu için – katrielalex

+6

"t" sadece Python 3'tür. Ayrıca, ouput dosyanız için bir içerik yöneticisi sağlarsınız, ancak giriş dosyanızı kapatmaz, bu tutarsız gibi görünür. –

+1

@katrielalex: Downvot yok, sadece fazla vermedim. Ancak ödevlere cevap vermek [bunu yapmak için doğru yol değil] (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

şey

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

<do stuff with the result> 
0

en kolay yolu ('A' saklanabilir olurdu) dosyasındaki her hattı üzerinden yineleme istiyorum varsayarak düzenli ifadeler ile yapmaktır Eğer aynı dosyada dizeleri değiştirmek isterseniz

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

, muhtemelen yerel içine içeriğini okumak zorunda ... do Değişken, kapatın ve yeniden açın yazma: I with blok sona ermesinden sonra dosyayı kapatır, bu örnekte, içinde the with statement kullanıyorum

- ya son komutunu yerine getirmek, veya bir istisna ile biter, normal olarak zaman.

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) 

Bu dosya isimleri farklı olsaydı, biz tek with ifadesiyle bu daha zarif yapmış olabilir söz etmek gerekiyor.

+0

Bu çözüm daha iyi çünkü dosyayı yukarıdaki cevapta tersine çevirmiyorsunuz. –

+0

Neden kapatmadan önce() hemen flush()? Umarım close() gerekli olan herşeyi yapar. – ChrisPhoenix

+0

@ChrisPhoenix [Doğru] (http://stackoverflow.com/questions/2447143/does-close-imply-flush-in-python), "with" yi kullanabiliriz ve hem "close" hem de "floştan" kurtulabiliriz . –

7
#!/usr/bin/python 

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

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