Anfänger: file open write sort close

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.
Jan-Peer
User
Beiträge: 166
Registriert: Dienstag 2. Oktober 2007, 10:55

Hallo,

endlich jemand, der für Ordnung sorgt :wink:

Zur Frage:

Auf die Schnelle fallen mir zwei Möglichkeiten ein. Die erste ist, die Schleife "klassisch" mit xrange laufen zu lassen. Damit hast du die Möglichkeit, jederzeit wieder auf frühere oder spätere Zeilen zugreifen zu können. Wenn es nur darum geht, zu gucken, ob die vorhergehende Zeile Ähnlichkeiten mit der aktuellen aufweist, kannst du sie dir beim Durchlaufen auch immer in eine Variable "wegspeichern".
Schnäik
User
Beiträge: 10
Registriert: Freitag 8. Februar 2008, 17:27

Jan-Peer hat geschrieben:ob die vorhergehende Zeile Ähnlichkeiten mit der aktuellen aufweist, kannst du sie dir beim Durchlaufen auch immer in eine Variable "wegspeichern".
Das wäre zu spät - ich müsste gucken ob die aktuelle Zeile Ähnlichkeiten mit der nachfolgenden aufweist. Letztendlich andersrum natürlich auch machbar - aber ich habe jetzt schon Knoten im Hirn :lol:

Und um xrange zu nutzen müsste ich DATEI vorher aber komplett einlesen oder nicht? Z.B.:

Code: Alles auswählen

zeilen = open(DATEI, 'r').readlines()
for z_nummer in xrange(zeilen):
Das würde ich nur ungern machen - "Datei" ist sehr groß...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ja, aber ich sehe nicht wie dir ``fileinput`` dabei helfen würde. Der Wohl einfachste Ansatz ist der von Jan-Peer vorgeschlagene.

Oder du kannst ein bisschen Glue-Code schreiben, um aus einer Datei immer zwei Zeilen gleichzeitig auszulesen. Ist in der Benutzung dann einfacher, aber das musst du eben implementieren.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Schnäik
User
Beiträge: 10
Registriert: Freitag 8. Februar 2008, 17:27

Leonidas hat geschrieben:Ja, aber ich sehe nicht wie dir ``fileinput`` dabei helfen würde. Der Wohl einfachste Ansatz ist der von Jan-Peer vorgeschlagene.
Habs mir angeguckt - Recht hast Du.
Leonidas hat geschrieben:Oder du kannst ein bisschen Glue-Code schreiben, um aus einer Datei immer zwei Zeilen gleichzeitig auszulesen. Ist in der Benutzung dann einfacher, aber das musst du eben implementieren.
Das ist so naheliegend dass man wie immer nicht selbst drauf kommt :D Wenn allerdings 3,4,5 etc. nacheinanderliegende Zeilen betroffen sind komme ich damit auch nicht weiter.

Mache erst mal mit der Jan-Peer Methode weiter. Thx.
BlackJack

"Klassisch" ohne die gesamte Datei ein zu lesen wäre das merken der letzten Zeile.

Man könnte auch einen Iterator schreiben, der eine `peek()`-Operation erlaubt um ein Element vor zu schauen. In dem Fall ist dann der "Endfall" interessant: Was soll passieren, wenn man versucht "hinter" die letzte Zeile zu schauen?

Wenn Du den Knoten im Hirn nicht erwähnt hättest, würde ich jetzt auf `itertools.groupby()` hinweisen. :-)

Zu den Quelltextschnippseln: `readlines()` liest die gesamte Datei in den Speicher. Man kann auch direkt über Dateiobjekte iterieren, dann wird immer nur ein interner Puffer von ein paar Kilobyte gelesen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Edit: In den richtigen Thread umgezogen.
Zuletzt geändert von Leonidas am Dienstag 12. Februar 2008, 15:24, insgesamt 1-mal geändert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Falscher Thread?
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Rebecca hat geschrieben:Falscher Thread?
Indeed. Ist nun ausgebessert, danke. :idea:
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten