Seite 1 von 1

file object ändern ohne auf Platte zu schreiben?

Verfasst: Samstag 2. April 2005, 17:19
von CM
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

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

Verfasst: Samstag 2. April 2005, 19:28
von gerold
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
:-)

Verfasst: Sonntag 3. April 2005, 16:19
von CM
Oh! Ah! Da hat wohl einer hier die Doku vergessen :oops:
Funktioniert natürlich wie dafür geschaffen ...

Vielen Dank,
Christian