Temporäre Datei in Python erstellen

Jay Shaw 10 Oktober 2023
  1. Erstellen Sie eine temporäre Datei in Python mit dem Modul tempfile
  2. Erstellen Sie eine benannte temporäre Datei in Python
  3. Erstellen Sie eine temporäre Datei in Python mit der Funktion mkstemp
  4. Erstellen Sie ein temporäres Verzeichnis in Python
Temporäre Datei in Python erstellen

In diesem Artikel wird erläutert, wie Sie eine temporäre Datei und ein temporäres Verzeichnis in Python erstellen. Temporäre Dateien in Python werden mit dem Modul tempfile erzeugt.

Dieser Artikel erklärt auch vier Unterfunktionen von tempfile, nämlich TemporaryFile, NamedTemporaryFile, mkstemp und TemporaryDirectory.

Erstellen Sie eine temporäre Datei in Python mit dem Modul tempfile

Diese Funktion erstellt eine sicher erstellte temporäre Datei in Python, die einen Speicherbereich zurückgibt, der einer Datei ähnelt, die vorübergehend verwendet werden kann. Es wird zerstört, sobald es geschlossen wird (einschließlich eines impliziten Schließens, wenn das Objekt der Garbage Collection unterzogen wird).

Die Syntax zum Verwenden dieser Funktion zum Erstellen einer temporären Datei in Python lautet:

file = tempfile.TemporaryFile()
# 	OR
file = tempfile.TemporaryFile(
    mode="w+b",  # Remains as Default mode if not mentioned
    suffix=None,  # adds a suffix to file name
    prefix=None,  # adds prefix to file name
    # etc.
)

Diese temporäre Datei in Python wird bei Kontextbeendigung (with-Block) oder Dateiobjektzerstörung file.close() aus dem Dateisystem gelöscht. Die neue Datei kann gelesen und geschrieben werden, ohne geschlossen zu werden, da der Standardwert des Modusparameters w+b ist.

Es arbeitet im Binärmodus, um unabhängig von den gespeicherten Daten die Konsistenz über alle Systeme hinweg aufrechtzuerhalten. Einige zusätzliche Begriffe wie Pufferung, Codierung, Fehler und Zeilenumbruch sind Teil der in Python integrierten Funktion open(), die innerhalb des Parameters verwendet werden kann.

Das folgende Programm zeigt, wie man mit TemporaryFile() eine temporäre Datei in Python erstellt.

Die erste Codezeile importiert das Bibliothekspaket tmpfile. Es wird eine Variable filepath erstellt, die die Funktion tempfile.TemporaryFile() verwendet, um eine temporäre Datei zu erstellen.

Daten werden mit der Funktion filepath.write() in die temporäre Datei geschrieben. Dieser Parameter nimmt nur einen Wert vom Typ Byte an, daher wird das Literal b vor der Zeichenfolge hinzugefügt.

Die Funktion filepath.seek(0) lädt die Datei in den Filestream ab Länge 0.

Die Druckvariable filepath zeigt die Adresse des Objekts. Um den Dateinamen der temporären Datei zu prüfen, wird die Funktion filepath.name() ausgegeben.

Die Funktion filepath.read() liest die Daten aus der temporären Datei und gibt sie dann aus. Zuletzt wird das temporäre Dateiobjekt mit filepath.close() freigegeben.

import tempfile

filepath = tempfile.TemporaryFile()

filepath.write(b"Writing some stuff")
filepath.seek(0)

print(filepath)
print(filepath.name)

print(filepath.read())
filepath.close()

Ausgang:

"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
<tempfile._TemporaryFileWrapper object at 0x00000285D92DAC50>
C:\Users\WIN10~1\AppData\Local\Temp\st.cq3d03ezloraine
b'Hello world!'

Process finished with exit code 0

Schauen wir uns ein anderes Programm an.

Hier verwendet die Variable filepath drei Parameter der Unterfunktion TemporaryFile. Der Modus ist auf w+b eingestellt, was für Lesen und Schreiben steht.

Auch ein Präfix st. und an den Dateinamen wird ein Suffix loarine angehängt. Die Daten werden in das temporäre geschrieben, und der Dateiname wird gedruckt.

import tempfile

filepath = tempfile.TemporaryFile(
    mode="w+b",
    prefix="st.",  # adds prefix to file name
    suffix="loraine",  # adds a suffix to file name
)

filepath.write(b"Hello world!")

print(filepath.name)

filepath.close()

Es ist ersichtlich, dass Präfix und Suffix zum Dateinamen hinzugefügt wurden.

"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
C:\Users\WIN10~1\AppData\Local\Temp\st.kepthvu_loraine

Process finished with exit code 0

Es ist ersichtlich, dass die temporäre Datei am Ende des Programms explizit geschlossen wurde. Dadurch wird die Datei geschlossen, aber nicht gelöscht.

Der Dateiname kann auch nach dem Schließen der Datei angezeigt werden, aber ihr Inhalt kann nicht geladen werden.

Das Lesen oder Schreiben in eine geschlossene temporäre Datei in Python führt zu einem Wertfehler, genau wie bei jeder normalen Datei.

import tempfile

filepath = tempfile.TemporaryFile(
    mode="w+b",
    prefix="st.",  # adds prefix to file name
    suffix="loraine",  # adds a suffix to file name
)

filepath.write(b"Hello world!")

filepath.close()

print(filepath.name)

filepath.write(b"Hello world!")

Ausgang:

"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
C:\Users\WIN10~1\AppData\Local\Temp\st.f7n0s5a6loraine
Traceback (most recent call last):
  File "C:/Users/Win 10/main.py", line 14, in <module>
    filepath.write(b'Hello world!')
  File "C:\Python36\lib\tempfile.py", line 485, in func_wrapper
    return func(*args, **kwargs)
ValueError: write to closed file

Process finished with exit code 1

Erstellen Sie eine benannte temporäre Datei in Python

Der einzige Unterschied zwischen dieser Funktion und TemporaryFile() besteht darin, dass diese dafür sorgt, dass die Datei einen sichtbaren Namen im Dateisystem hat. Dieser Name ist im Attribut name zu finden, wenn das Objekt zurückgegeben wird.

In UNIX kann derselbe Name zum Öffnen einer anderen temporären Datei verwendet werden, selbst wenn die vorherige Datei bereits geöffnet ist, aber in Windows ist dies verboten.

Standardmäßig ist die temporäre Datei in Python so eingestellt, dass sie entfernt wird, sobald sie geschlossen wird, aber sie kann durch die Einstellung delete = False deaktiviert werden. Ähnlich wie eine normale Datei kann dieses dateiähnliche Objekt in einer Anweisung verwendet werden.

Die Syntax zur Verwendung dieser Unterfunktion lautet:

tmp = tempfile.NamedTemporaryFile()
# 	OR
tmp = tempfile.NamedTemporaryFile(mode="w+b", delete=False, suffix=None, prefix=None)

Verwenden Sie das folgende Programm, um eine benannte temporäre Datei in Python zu erstellen.

Dieses Programm importiert hier zwei Bibliothekspakete, os und tempfile. Über die Variable tempo_file wird eine temporäre Datei erstellt, der Parameter delete auf False gesetzt und ein Präfix und Suffix übergeben.

Innerhalb des Blocks try wird das Dateiobjekt mit print(tempo_file) gedruckt. Dann wird der Dateiname mit print(tempo_file.name) ausgegeben.

Die Funktion tempo_file.write() wird verwendet, um in diese temporäre Datei zu schreiben.

Innerhalb des finally-Blocks wird die Datei mit tempo_file.close() geschlossen. Dann wird mit der Funktion os.unlink() der Name der Datei vom Dateiobjekt getrennt.

import os
import tempfile

tempo_file = tempfile.NamedTemporaryFile(delete=False, prefix="Ice", suffix="cream")
try:
    print(tempo_file)
    print(tempo_file.name)
    tempo_file.write(b"Peacock is national bird of India")
finally:
    tempo_file.close()
    os.unlink(tempo_file.name)

Ausgang:

"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
<tempfile._TemporaryFileWrapper object at 0x000001DE90935C18>
C:\Users\WIN10~1\AppData\Local\Temp\Icez5eghui0cream

Process finished with exit code 0

Der Parameter delete wird im obigen Programm auf False gesetzt, d.h. wenn er nicht implizit geschlossen wird, bleibt er geöffnet. Wenn der Parameter delete auf True gesetzt ist, kann nach dem Schließen der Datei nicht auf den Dateinamen zugegriffen werden.

import os
import tempfile

tempo_file = tempfile.NamedTemporaryFile(delete=True)
try:
    print(tempo_file.name)
finally:
    tempo_file.close()
    os.unlink(tempo_file.name)

print(tempo_file.name)

Ausgang:

"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/ain.py"
C:\Users\WIN10~1\AppData\Local\Temp\tmp6j3xxjzr
Traceback (most recent call last):
  File "C:/Users/Win 10/main.py", line 14, in <module>
    os.unlink(tempo_file.name)
FileNotFoundError: [WinError 2] The system cannot find the file specified:'C:\\Users\\WIN10~1\\AppData\\Local\\Temp\\tmp6j3xxjzr'

Process finished with exit code 1

Ein with-Block ist hilfreich, da er die Datei automatisch schliesst.

import tempfile

with tempfile.TemporaryFile(delete=True) as tempo_file:
    print(tempo_file)
    print(tempo_file.name)
    tempo_file.write(b"Peacock is national bird of India")

print(tempo_file.read())

Ausgang:

"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
<tempfile._TemporaryFileWrapper object at 0x0000027EB1C09390>
C:\Users\WIN10~1\AppData\Local\Temp\tmpzk_gpkau
Traceback (most recent call last):
  File "C:/Users/Win 10/main.py", line 11, in <module>
    print(tempo_file.read())
  File "C:\Python36\lib\tempfile.py", line 485, in func_wrapper
    return func(*args, **kwargs)
ValueError: read of closed file

Process finished with exit code 1

Erstellen Sie eine temporäre Datei in Python mit der Funktion mkstemp

Diese Funktion bietet die höchstmögliche Sicherheitsstufe zum Erstellen einer temporären Datei in Python. Nur die Benutzer-ID, die die Datei erstellt hat, hat Lese- und Schreibzugriff.

Niemand kann die Datei ausführen, wenn die Plattform Berechtigungsbits verwendet, um festzustellen, ob eine Datei ausführbar ist. Selbst untergeordnete Prozesse erben den Dateideskriptor nicht.

Die für mkstemp verwendete Syntax lautet:

tempfile.mkstemp(suffix=None, prefix=None, dir=None, text=False)

Anders als bei der Funktion TemporaryFile() muss der Programmierer bei Verwendung von mkstemp() implizit die temporäre Datei löschen. Die Funktion hat eindeutige Rollen für die Parameter prefix, suffix und dir.

Schauen wir sie uns an.

Der Dateiname endet mit einem bestimmten Suffix, wenn er nicht auf None gesetzt ist; andernfalls wird es keinen geben. Am Anfang des Suffixes muss bei Bedarf ein Punkt gesetzt werden, da mkstemp() keinen zwischen Dateinamen und Suffix setzt.

Der Dateiname beginnt mit einem Präfix, falls vorhanden, anstelle von None; andernfalls wird ein Standardpräfix verwendet. Der von gettempprefix() oder gettempprefixb() zurückgegebene Wert dient als Standard, je nachdem, welches Programm geeignet erscheint.

Das dir speichert das Verzeichnis der temporären Datei. Eine Datei wird in einem bestimmten Verzeichnis erstellt, wenn dir nicht auf None gesetzt ist; Andernfalls wird ein Standardverzeichnis verwendet.

Das Standardverzeichnis ist plattformabhängig.

Durch Ändern der Umgebungsvariablen TMPDIR, TEMP oder TMP kann der Anwendungsbenutzer die Auswahl des Standardverzeichnisses aus dieser plattformspezifischen Liste überschreiben.

suffix, prefix und dir müssen alle denselben Typ haben, wenn sie nicht auf None gesetzt sind. Wenn es sich um Bytes handelt, lautet der zurückgegebene Name Bytes und nicht str.

Das Übergeben von suffix=b erzwingt Bytes im Rückgabewert anstelle des Standardverhaltens.

Die Datei wird im Textmodus geöffnet, wenn der Text angegeben und True ist. Wenn es auf False gesetzt ist, öffnet das System die Datei standardmäßig im Binärmodus.

Das folgende Programm erstellt mit mkstemp eine temporäre Datei. Die Funktion mkstemp verwendet zwei Argumente, das erste ist die Kennung der Datei und das zweite der Dateiname.

Innerhalb eines try-Blocks wird die Datei mit einem with-Block über ihr Handle geöffnet. Dann werden einige Daten in die Datei geschrieben.

Innerhalb des finally-Blocks wird die Datei implizit mit os.unlink(filename) gelöscht.

import os
import tempfile

handle, filename = tempfile.mkstemp(suffix=".bat")
try:
    with os.fdopen(handle, "w") as f:
        f.write("signature")
        print(handle)
        print(filename)

finally:
    os.unlink(filename)

Ausgang:

"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
3
C:\Users\WIN10~1\AppData\Local\Temp\tmp1yvy9j_c.bat

Process finished with exit code 0

Erstellen Sie ein temporäres Verzeichnis in Python

Diese Klasse macht ein temporäres Verzeichnis sicher. Diese Objekte können mit einem Kontextmanager wie dem with-Block verwendet werden.

Neu gebildete temporäre Verzeichnisse und ihre Inhalte werden bei Kontextbeendigung oder temporärer Verzeichnisobjektzerstörung aus dem Speicher gelöscht.

Das Attribut name des zurückgegebenen Objekts enthält den Verzeichnisnamen, der abgerufen werden kann. Dieser Name wird dem Ziel der as-Klausel in der with-Anweisung (falls vorhanden) gegeben, wenn das zurückgegebene Objekt als Kontextmanager verwendet wird.

Zum Beispiel:

with tempfile.TemporaryDirectory() as f:  # 'f' is the 'as' clause in this while statement
    print("Temporary directory is created", f)

Der Aufruf der Methode cleanup() löscht explizit das Verzeichnis. Alle nicht behandelten Ausnahmen während der expliziten oder impliziten Bereinigung werden ignoriert, wenn Bereinigungsfehler ignorieren wahr ist.

Alle verbleibenden entfernbaren Gegenstände werden mit den Best-Effort-Techniken zerstört.

Um ein temporäres Verzeichnis zu erstellen, können wir das folgende Python-Programm verwenden:

import tempfile

with tempfile.TemporaryDirectory() as f:
    print("Temporary directory is created", f)

Ausgang:

"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
Temporary directory is created C:\Users\WIN10~1\AppData\Local\Temp\tmp1gk3c5z8

Process finished with exit code 0

Dieser Artikel hat Methoden zum Erstellen temporärer Dateien mit dem tempfile-Modul in Python und seinen Unterfunktionen erklärt.

Verwandter Artikel - Python File