nur eine Datei einlesen ...

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.
flow

nur eine Datei einlesen ...

Beitragvon flow » Samstag 18. Oktober 2003, 18:08

Hi. Ich will eine Datei Zeilenweise einlesen und dann vor jeder Zeile ein '#' schreiben, also die Zeilen auskommentieren.
Wie kann ich denn vorne was dranhaengen? Habe das bis jetzt nur hinten dran bekommen (mit f = file('blah.txt' , 'a') )
Ansonsten habe ich das Problem das wenn ich die Datei einlese, dann etwas reinschreibe alles andere geloescht ist ...
Braechte da wohl mal Rat!

mfg flow
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 18. Oktober 2003, 18:39

zweite datei erstellen, auskommentierete (#) zeilen einfügen, erste datei anhängen, erste löschen, zweite verschieben so dass sie dir erste ersetzt. Dieser ansatz ist nicht so schön.

Aber gibt es nicht auch eine seek funktion? Damit liese sich doch sicher etwas machen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
flow

Beitragvon flow » Samstag 18. Oktober 2003, 19:05

ja mit seek() habe ich auch mal rumprobiert. War sogar meine erster Ansatz. Wollte eine Zeile einlesen und dann mit seek() an die erste Stelle wechseln und dort dann ein # schreiben. Das hatte sogar funktioniert aber ich wusste nicht wie ich dann zur naechsten Zeile wechsele.
Ich muss dazu sagen, dass ich heute das erste Mal mit Python zu tun habe.
Wenn ich eine Datei mit read() einlese, liest er doch alles ein, also vom Anfang der Datei bis zum Ende, oder? Das sollte ja dann fuer mich nicht viel nuetzen.
Ich habe readline() benutzt. Dann liest er ja eine Zeile ein. Aber wie durchlaufe ich dann die naechsten Zeilen? Dachte an eine For-Schleife? So in der Art " for i in f : " Er soll damit alle Zeilen mit readline() nacheinander einlesen und jeweils nachdem er eine Zeile eingelesen hat ein # vorsetzen. Das wird so vermutlich aber nicht funktionieren ...
Ich habe seek() auch noch nicht ganz verstanden. Sollte wohl so funktionieren :
seek( offset [ , whence] ) ... was ist offset? Und whence kann 0, 1 oder 2 sein ?
Ich will auch niemanden auffordern mir kompletten Code zu geben ;) Will das selber hinbekommen, sonst bin ich frustriert * aber momentan sieht es noch ein wenig duester aus.
Also wie muss so eine FOr-Schleife aussehen? (wenn ueberhaupt eine sinnvoll ist ...)

mfg flow
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Samstag 18. Oktober 2003, 19:56

Hi flow,

Python2.3 vorausgesetzt:

Code: Alles auswählen

infile = file("datei.txt","r")
outfile = file("datei_neu.txt","w")
for zeile in infile:
    outfile.write("#"+zeile)
outfile.close()
infile.close()

Du könntest auch vorher die "datei.txt" umbenennen und nachher löschen.

Gruß

Dookie
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Beitragvon Milan » Samstag 18. Oktober 2003, 21:31

Du kannst auch alles in den Speicher lesen und dann was schreiben:

Code: Alles auswählen

f=open('datei.txt','w+')
lines=f.readlines()
f.seek(0)
for line in lines:
    f.write('#'+line)
f.close()


Mit w+ öffnest du Dateien im Updatemodus.
flow

Beitragvon flow » Samstag 18. Oktober 2003, 21:38

ja danke hat alles geklappt! ;)

mfg flow

Wer ist online?

Mitglieder in diesem Forum: hatschy