file object ändern ohne auf Platte zu schreiben?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

file object ändern ohne auf Platte zu schreiben?

Beitragvon CM » Samstag 2. April 2005, 17:19

Hoi,

tut mir leid, ein etwas kryptischer Titel - wieder mal.

Was ich machen möchte ist folgendes: Ich möchte einem Programm verschiedene CSV-Formate zugänglich machen. Außerdem soll das Programm keinen Unterschied machen, ob eine solche Datei auf einem Windowsrechner oder einer UNIX-Maschine erstellt worden ist. Konkret liegt das Problem in den verschiedenen Zeilenenden.
Meine Frage: Kann man eine Datei öffnen, best. Charaktere austauschen und dann weitermachen OHNE die Datei wieder auf Platte auszuschreiben? Sonst brauche ich temporäre Dateien. Das mache ich auch schon, möchte aber gerne darauf verzichten.
Bisher sieht mein Code so aus (ohne Errorhandling und sonstigen Schnickschnack):

Code: Alles auswählen

f = open(fname,'r')
#create temporary file
tmp = os.tmpfile()   

to_replace = chr(13) #replace the MS carriage return character
fill_in = chr(10)    #fill in the UNIX line end character
   
for x in f.read():
   if x == to_replace:
      tmp.write(x.replace(to_replace,fill_in))
   else:
      tmp.write(x)
f.close()
tmp.seek(0)
#einfach ausgeben ist natürlich nicht was ich mache,
#aber es zeigt was man machen könnte
for line in tmp: print line
tmp.close()


Die Größe der Dateien erzwingt kein Ausschreiben auf Platte, es lohnt sich noch nicht einmal mit Regulären Ausdrücken zu arbeiten. Also: Weiß jemand ob und wie man auf os.tmpfile() verzichten kann?

Danke,
Christian
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: file object ändern ohne auf Platte zu schreiben?

Beitragvon gerold » Samstag 2. April 2005, 19:28

CM hat geschrieben: Außerdem soll das Programm keinen Unterschied machen, ob eine solche Datei auf einem Windowsrechner oder einer UNIX-Maschine erstellt worden ist. Konkret liegt das Problem in den verschiedenen Zeilenenden.

Hallo CM!

Wenn du eine Datei so zum Lesen öffnest:

Code: Alles auswählen

my_readonly_file = file("dateiname", "rU")

dann ist es egal, ob Windows, Mac oder Linux --> das Zeilenendzeichen ist innerhalb von Python immer "\n". Das "U" ist der Zauberbuchstabe.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Sonntag 3. April 2005, 16:19

Oh! Ah! Da hat wohl einer hier die Doku vergessen :oops:
Funktioniert natürlich wie dafür geschaffen ...

Vielen Dank,
Christian

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]