Hallo zusammen,
http://abop-german.berlios.de/read/io.html
Auf der Seite gibts ein Beispiel für die Verwendung von file.
Wofür ist die Whileschleife gut
Bringt das irgendwas
Liebe Grüße
rolgal_reloaded
Warum macht er das??
-
- User
- Beiträge: 312
- Registriert: Dienstag 24. Oktober 2006, 19:31
Ja, aber es geht doch auch anders.
readlines oder?
Ich habe nie eine Whileschleife gebraucht.
LG
rolgal_reloaded
readlines oder?
Ich habe nie eine Whileschleife gebraucht.
LG
rolgal_reloaded
- Matflasch
- User
- Beiträge: 41
- Registriert: Donnerstag 25. März 2004, 15:42
- Wohnort: Hamburg
- Kontaktdaten:
Einfach mit einer for-each-Schleife über den Iterator, den dir fp.readlines() gibt iterieren, somit liest du Zeile für Zeile aus, ohne eine "while True:"-Schleife mit nem nicht so schönen break zu verwenden
-
- User
- Beiträge: 312
- Registriert: Dienstag 24. Oktober 2006, 19:31
Code: Alles auswählen
>>> f=file('C:\\Dokumente und Einstellungen\\rolgal\\Eigene Dateien\\test.txt', 'r')
>>> zeilen = f.readlines()
>>> for zeile in zeilen:
print zeile,
LG
rolgal reloaded
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi rolgal_reloaded!rolgal_reloaded hat geschrieben:Wofür ist die Whileschleife gut
Bringt das irgendwas
Das ist schnell, liest die Datei aber auch komplett in den Speicher. Nicht geeignet für große Dateien:
Code: Alles auswählen
f = file("dateiname.txt", "r")
lines = f.readlines()
f.close()
print lines
Code: Alles auswählen
f = file("dateiname.txt", "r")
while True:
line = f.readline()
if not line:
break
print line
f.close()
Code: Alles auswählen
f = file("dateiname.txt", "r")
for line in iter(f.readline, ""):
print line
f.close()
Code: Alles auswählen
f = file("dateiname.txt", "r")
for line in f:
print line
f.close()
Gerold
Zuletzt geändert von gerold am Sonntag 19. November 2006, 22:33, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- Michael Schneider
- User
- Beiträge: 569
- Registriert: Samstag 8. April 2006, 12:31
- Wohnort: Brandenburg
Hi Matflasch,Matflasch hat geschrieben:Einfach mit einer for-each-Schleife über den Iterator, den dir fp.readlines() gibt iterieren, somit liest du Zeile für Zeile aus, ohne eine "while True:"-Schleife mit nem nicht so schönen break zu verwenden
ich weiß nicht, welche Python Version Du verwendest. Bei mir unter 2.4 liefert ein einfaches fp.readlines() eine Liste, keinen Iterator. Und genau deshalb ist es bei großen Dateien eben nicht sinnvoll, die ganze Datei auf einmal zu lesen. Erstens kann dadurch der Arbeitsspeicher gesprengt werden, zum anderen werden Listen mit mehreren tausend oder millionen von Elementen einfach grottenlangsam.
Deshalb: Datei nur ganz einlesen, wenn sie nicht evtl. kritische Größen erreicht.
Grüße,
der Michel
Diese Nachricht zersört sich in 5 Sekunden selbst ...
-
- User
- Beiträge: 312
- Registriert: Dienstag 24. Oktober 2006, 19:31
@gerold,
dein letztes Beispiel gefällt mir auch gut.
LG
rolgal_reloaded
dein letztes Beispiel gefällt mir auch gut.
LG
rolgal_reloaded
-
- User
- Beiträge: 312
- Registriert: Dienstag 24. Oktober 2006, 19:31
@Matflasch,
ah, du hast gleich so gemeint:
Für Anfänger finde ich mein vorhin genanntes Beispiel besser.
Aber schön zu wissen, dass es so auch geht, geil.
LG
rolgal_reloaded
ah, du hast gleich so gemeint:
Code: Alles auswählen
>>> f=file('C:\\Dokumente und Einstellungen\\rolgal\\Eigene Dateien\\test.txt', 'r')
>>> for zeile in f.readlines():
print zeile,
Aber schön zu wissen, dass es so auch geht, geil.
LG
rolgal_reloaded
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Im What's new in Python 2.5 gibt es auch ein Beispiel mit dem neuen `with`-Statement.gerold hat geschrieben:Wenn man weiß, dass man über ``f`` iterieren kann, dann so:Code: Alles auswählen
f = file("dateiname.txt", "r") for line in f: print line f.close()
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- Matflasch
- User
- Beiträge: 41
- Registriert: Donnerstag 25. März 2004, 15:42
- Wohnort: Hamburg
- Kontaktdaten:
Hmm, Ok,
musste noch nicht mit so grossen Dateien arbeiten, dass es langsam/träge wurde, bei mir hat es bisher immer gereicht mit der liste, die mit f.readlines() gibt.
Aber das werd ich dann bei Gelegenheit mal austesten, ab wann merkt man es denn schon, also ab welcher Dateigröße bzw. Zeilenanzahl?
Mfg, Matflasch
musste noch nicht mit so grossen Dateien arbeiten, dass es langsam/träge wurde, bei mir hat es bisher immer gereicht mit der liste, die mit f.readlines() gibt.
Aber das werd ich dann bei Gelegenheit mal austesten, ab wann merkt man es denn schon, also ab welcher Dateigröße bzw. Zeilenanzahl?
Mfg, Matflasch
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Matflasch!Matflasch hat geschrieben:ab wann merkt man es denn schon, also ab welcher Dateigröße bzw. Zeilenanzahl?
Das hängt vom freien Speicher ab.
Auf einem Computer mit 128 MB RAM und einem installierten Windows XP (das braucht meist schon den kompletten RAM), wirst du es sicher merken, wenn du eine 20 MB große Datei in den Speicher lädst.
Ich, z.B., habe einen Laptop mit 64 MB RAM und Windows ME drauf. Da merkt man es, wenn mal eine 2 MB-Datei in den Speicher geladen wird.
Wenn du z.B. Logdateien auswerten musst, dann weißt du ja nicht, wie groß diese einmal sein werden. Ich hatte schon Apache-Log-Dateien, die 200 MB groß waren...
Es ist also fast immer besser, speicherschonend zu programmieren.
Wenn ich die Datei sowiso komplett im Speicher brauche, -- dann ist ``readlines()`` die bessere Wahl. Wenn ich die Datei zeilenweise durchlaufen kann und nach dem Betrachten der Zeile, diese wieder aus dem Speicher löschen kann, dann ist das Iterieren über die Zeilen die bessere Wahl.
lg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.