Hallo, gibt es eine einfache ("batteries included") Möglichkeit, eine Liste von file like objects als ein einziges file like object (zum Lesen) zu behandeln? So dass für die ersten bytes das erste Object verwendet wird etc.? Hintergrund: Ich habe eine Liste von "memoryview"-Objekten, (und "String"-Objekten), die recht groß (>>1GB) sind (und aus einem memory-mapped file stammen), und die zusammengefügt ein "file like object" ergeben sollen. Und wie würde man aus deinem memoryview effektiv die einzelnen Bytes bekommen? meoryview.tobytes() erstellt ja offenbar eine Kopie, was nicht sehr effektiv ist. Schöne Grüße Ole
On 2017-09-07 17:45, Оlе Ѕtrеісhеr wrote:
gibt es eine einfache ("batteries included") Möglichkeit, eine Liste von file like objects als ein einziges file like object (zum Lesen) zu behandeln? So dass für die ersten bytes das erste Object verwendet wird etc.?
Ist vielleicht `itertools.chain` das, was du suchst? https://docs.python.org/3/library/itertools.html#itertools.chain Viele Grüße Stefan
Am 07.09.2017 um 17:45 schrieb Оlе Ѕtrеісhеr:
gibt es eine einfache ("batteries included") Möglichkeit, eine Liste von file like objects als ein einziges file like object (zum Lesen) zu behandeln? So dass für die ersten bytes das erste Object verwendet wird etc.?
Hintergrund: Ich habe eine Liste von "memoryview"-Objekten, (und "String"-Objekten), die recht groß (>>1GB) sind (und aus einem memory-mapped file stammen), und die zusammengefügt ein "file like object" ergeben sollen.
Eine 8 TB-Platte als swapspace und byte_feld=bytes([]) for name in liste: byte_feld+=open(name,"rb").read() Hermann der das so probieren würde. -- http://www.hermann-riemann.de
Hallo Ole! Оlе Ѕtrеісhеr schrieb am 07.09.2017 um 17:45:
gibt es eine einfache ("batteries included") Möglichkeit, eine Liste von file like objects als ein einziges file like object (zum Lesen) zu behandeln? So dass für die ersten bytes das erste Object verwendet wird etc.?
Hintergrund: Ich habe eine Liste von "memoryview"-Objekten, (und "String"-Objekten), die recht groß (>>1GB) sind (und aus einem memory-mapped file stammen), und die zusammengefügt ein "file like object" ergeben sollen.
Ist mir nicht bekannt, und "schnell mal suchen" hat irgendwie auch nichts gebracht. Nicht einmal in den ActiveState Python Rezepten, die bei solchen Dingen oft recht gut sind. Denke aber mal, dass es gar nicht so kompliziert wäre, das selbst zu schreiben. Gibt die üblichen Sonderfälle zu beachten an den Dateiübergängen, aber da .read() es erlaubt, weniger Daten zurückzuliefern als angefragt, sollte auch das nicht allzu komplizert sein. Klingt für mich nach einem interessanten "Freude-am-Programmieren"-Projekt, das es verdient hätte, auf PyPI aufzutauchen. :)
Und wie würde man aus deinem memoryview effektiv die einzelnen Bytes bekommen? meoryview.tobytes() erstellt ja offenbar eine Kopie, was nicht sehr effektiv ist.
Slicen. Von den Strings würde ich auch erst explizit einen Memoryview erzeugen, damit du einfach alles effizient und ohne Kopie heraus schneiden kannst. Der Standardanwendungsfall für deine Klasse wäre ja genau der Fall, dass die Datenmenge zu groß ist, um einfach alles im Speicher aneinander zu hängen. Überhaupt solltest du dir überlegen, ob ein einfaches Slicing-Interface nicht einfacher (und hübscher?) wäre als ein File-Interface. Allerdings müsstest du dann Schnittdaten mit der exakten Größe zurückgeben. Kannst ja mal beides probieren. :) Stefan
Am 08.09.2017 um 07:38 schrieb Stefan Behnel <python-de@behnel.de>:
Hallo Ole!
Оlе Ѕtrеісhеr schrieb am 07.09.2017 um 17:45:
gibt es eine einfache ("batteries included") Möglichkeit, eine Liste von file like objects als ein einziges file like object (zum Lesen) zu behandeln? So dass für die ersten bytes das erste Object verwendet wird etc.?
Hintergrund: Ich habe eine Liste von "memoryview"-Objekten, (und "String"-Objekten), die recht groß (>>1GB) sind (und aus einem memory-mapped file stammen), und die zusammengefügt ein "file like object" ergeben sollen.
Ist mir nicht bekannt, und "schnell mal suchen" hat irgendwie auch nichts gebracht. Nicht einmal in den ActiveState Python Rezepten, die bei solchen Dingen oft recht gut sind.
Diese Rezepte sind übrigens neulich erst nach GitHub übertragen worden, leider ohne die Kommentare, was aber auch nicht trivial wäre, außer vielleicht gesammelt in einer Art COMMENTS.rst-Datei... Jedenfalls kann man jetzt seit langem wieder neue Rezepte hinzufügen und alte aktualisieren. Muss ich noch mit einem zehn Jahre alten Rezept von mir machen. ;-) github.com/ActiveState/code Gruß, Dinu
participants (5)
-
Dinu Gherman
-
Hermann Riemann
-
ole-usenet-spam@gmx.net
-
Stefan Behnel
-
Stefan Schwarzer