split() Funktion re-implementieren, dass sie iterable ist.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Gar nicht - das ist unterbunden worden (vom BDFL), es ist in Python nicht vorgesehen dass man eingebaute Typen erweitern kann. Was du machen kannst, ist einen neuen Typ zu erstellen und von den eingebauten Typen zu erben.akis.kapo hat geschrieben:Allerdings ist mir nicht 100%ig klar, wie ich das mache,
dass es per mystring.iter_split(foo, bar) geht, statt als iter_split(string, ...).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Hmm, das habe ich mir nämlich fast schon gedacht.Leonidas hat geschrieben:Gar nicht - das ist unterbunden worden (vom BDFL), es ist in Python nicht vorgesehen dass man eingebaute Typen erweitern kann. Was du machen kannst, ist einen neuen Typ zu erstellen und von den eingebauten Typen zu erben.
Aber aus einem ganz anderem Grund:
Das mmap() Zeugs kann man ja nicht innerhalb der iter_strip() Funktion einbinden,
weil die ja auf einem fertigem String arbeitet (ob als Parameter übergeben oder auf Objekt angewandt, das sei mal hingestellt.).
Das bedeutet auch, dass das "neue" Objekt, dass von string erben soll, irgendwie ne classenmethode oder sonst einen Weg hat,
versteckt vom iter_split() irgendwas zu mmappen, oder sonstwas, welches blockweises lesen ermöglicht.
@BJ
Dann würde ich aber die manuelle Blockweise-Lesen Lösung bevorzugen,
weil mir gehts ja um Speicherersparnis bei riesigen Dateien.
Mmap, so wie ich das verstanden habe, speichert ja alles Doppelt.
Sprich, das Delta im Arbeitsspeicher (ist mutable und kann sich vom Dateiinhalt unterscheiden, solange man nicht closed oder flushed)
und dann noch das nicht unterbindbare Filecache vom OS, welches
das gelesene File cached (unverändert, bzw. halt so, wies gelesen wird.).
Oder nicht, oder was meint ihr?
EDIT:
Ist der nicht unterbindbare Filecache vom OS eigentlich wirklich so ununterbindbar?
Ich weiss von diversen Datenbanksystemen, dass sie für ihre SMS das OS Filecaching "deaktivieren"
(durch nen bestimmten open() Parameter, der das caching unterbindet?).
IBMs AIX soll das können. Die Frage ist kanns jedes Unix/Linux? (Oder gar Windows)
Und wenn ja, wo gibts diese Option in python? (ich seh da nix unter open oder file)
Ich verstehe Deine Bedenken bezüglich `mmap` nicht ganz. Du veränderst die Zeichenkette in `iter_split()` ja nicht, also muss `mmap` sich da auch keine Veränderungen im Speicher merken. Da wird nichts doppelt gespeichert, ausser die Kopien, die Du heraus "sliced", aber das hast Du bei jeder anderen Lösung auch. `mmap` dürfte wesentlich effizienter sein, als manuelles blockweises Lesen, das ist schliesslich *der* Mechanismus auf dem in der Regel die ganze virtuelle Speicherverwaltung vom Betriebssystem aufbaut.
Ebenfalls Edit: Wieso willst Du den Block-Cache unterbinden? Sowie dort Platz gebraucht wird, fliegen die Blöcke von dem `mmap` halt raus. Stört doch nicht weiter. Sofern sie dort überhaupt landen ─ wäre eigentlich unsinnig.
Ebenfalls Edit: Wieso willst Du den Block-Cache unterbinden? Sowie dort Platz gebraucht wird, fliegen die Blöcke von dem `mmap` halt raus. Stört doch nicht weiter. Sofern sie dort überhaupt landen ─ wäre eigentlich unsinnig.