Möglicherweise möchten Sie eine verwenden, tempfile.SpooledTemporaryFile
die Ihnen das Beste aus beiden Welten bietet, da zunächst eine temporäre speicherbasierte virtuelle Datei erstellt wird, automatisch jedoch zu einer physischen festplattenbasierten Datei gewechselt wird, wenn die im Speicher gespeicherten Daten einen bestimmten Wert überschreiten Größe.
Eine weitere nette Funktion ist, dass (bei Verwendung des Speichers) automatisch entweder ein io.BytesIO
oder io.StringIO
je nach verwendetem Speicher mode
verwendet wird, sodass Sie entweder Unicode-Zeichenfolgen oder Binärdaten (Bytes) lesen und schreiben können.
Der einzige schwierige Teil könnte die Tatsache sein, dass Sie das Schließen der Datei zwischen den Schritten vermeiden müssen, da dies dazu führen würde, dass sie aus dem Speicher oder der Festplatte gelöscht wird. Stattdessen können Sie es einfach mit einem Dateimethodenaufruf zum Anfang zurückspulen seek(0)
.
Wenn Sie mit der Datei fertig sind und sie schließen, wird sie automatisch von der Festplatte gelöscht, wenn die darin enthaltene Datenmenge dazu führte, dass sie auf eine physische Datei übertragen wurde.
tempfile.NamedSpooledTemporaryFile()
(eine Kombination ausNamedTemporaryFile()
undSpooledTemporaryFile()
)tempfile.NamedSpooledTemporaryFile()
ist, dass es keinen Sinn macht zu sagen, dass etwas, das als speicherbasierte virtuelle Datei beginnt, garantiert einen sichtbaren Namen im Dateisystem hat - obwohl es irgendwann einen haben könnte , sollte es sein Größe überschreitet den angegebenenmax_size
Schwellenwert. Der Quellcode für dastempfile
Modul befindet sich inpython/Lib/tempfile.py
. Dies kann hilfreich sein, wenn Sie selbst etwas mit dem gewünschten Verhalten implementieren möchten (was auch immer der Fall sein mag, wenn sich die Daten gerade im Speicher befinden).Sie haben
StringIO
undBytesIO
imio
Modul.StringIO
verhält sich wie eine im Textmodus geöffnete Datei - Lesen und Schreiben von Unicode-Zeichenfolgen (entspricht dem Öffnen einer Datei mitio.open(filename, mode, encoding='...')
), undBytesIO
verhält sich wie eine im Binärmodus geöffnete Datei (mode='[rw]b'
) und kann Schreibbytes lesen.Python 2:
In [4]: f = io.BytesIO('test') In [5]: type(f.read()) Out[5]: str In [6]: f = io.StringIO(u'test') In [7]: type(f.read()) Out[7]: unicode
Python 3:
In [2]: f = io.BytesIO(b'test') In [3]: type(f.read()) Out[3]: builtins.bytes In [4]: f = io.StringIO('test') In [5]: type(f.read()) Out[5]: builtins.str
quelle
StringIO
Instanz nicht der richtige Weg. Verwenden Sie dastempfile
Modul, um stattdessen einen temporären Dateinamen zu generieren.Sie können StringIO als virtuelle Datei aus der offiziellen Dokumentation verwenden
from io import StringIO output = StringIO() output.write('First line.\n') print >>output, 'Second line.' # Retrieve file contents -- this will be # 'First line.\nSecond line.\n' contents = output.getvalue() # Close object and discard memory buffer -- # .getvalue() will now raise an exception. output.close()
quelle
from io import StringIO
für Python> = 3Da ist das
StringIO
Modul, lesen Sie seine Dokumentation , es sollte einfach zu bedienen sein.Beachten Sie jedoch, dass dadurch der Inhalt der "Datei" im Speicher bleibt. Wenn Sie zu viele Daten haben, ist es wahrscheinlich besser, eine echte Datei zu erstellen, z. B. in / tmp, und diese anschließend zu löschen.
quelle
Wenn Sie anstelle einer Datei in den Speicher schreiben möchten, können Sie den Text einfach in einen Puffer schreiben und die folgende Funktion verwenden:
def write(text): global buffer buffer += text + '\n' # Add a linefeed as you would if you were writing to a file buffer = "" # Initialize the buffer write("My name is Steve Grafton")
Am Ende haben Sie einen Puffer, der dem entspricht, als hätten Sie Ihre Daten in eine Datei geschrieben. Öffnen Sie dann die Datei und lesen Sie den gesamten Inhalt in einen Puffer! Darüber hinaus können Sie den Puffer während des Vorgangs (bevor Sie mit dem Schreiben fertig sind) verwenden und darin suchen, als hätten Sie eine Datei zum Lesen und Schreiben erstellt, nur in diesem Fall Ihren Zeiger
quelle