Temporäre Datei in Python erstellen
-
Erstellen Sie eine temporäre Datei in Python mit dem Modul
tempfile
- Erstellen Sie eine benannte temporäre Datei in Python
-
Erstellen Sie eine temporäre Datei in Python mit der Funktion
mkstemp
- Erstellen Sie ein temporäres Verzeichnis in Python
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
- So erhalten Sie alle Dateien eines Verzeichnisses
- Wie man in Python Text an eine Datei anhängt
- Wie man prüft, ob eine Datei in Python existiert
- Wie man Dateien mit einer bestimmten Endung nur in Python findet
- Wie man bestimmte Zeilen aus einer Datei in Python liest
- Dateiberechtigungen in Python ändern