Ich habe ein Python-Webformular mit zwei Optionen - Datei-Upload und Textbereich . Ich muss die Werte von jedem nehmen und sie an ein anderes Befehlszeilenprogramm übergeben. Ich kann den Dateinamen leicht mit Optionen zum Hochladen von Dateien übergeben, bin mir jedoch nicht sicher, wie ich den Wert des Textbereichs übergeben soll.
Ich denke, was ich tun muss, ist:
- Generieren Sie einen eindeutigen Dateinamen
- Erstellen Sie eine temporäre Datei mit diesem Namen im Arbeitsverzeichnis
- Speichern Sie die vom Textbereich übergebenen Werte in der temporären Datei
- Führen Sie das Befehlszeilenprogramm in meinem Python-Modul aus und übergeben Sie ihm den Namen der temporären Datei
Ich bin nicht sicher, wie ich einen eindeutigen Dateinamen generieren soll. Kann mir jemand Tipps geben, wie man einen eindeutigen Dateinamen generiert? Alle Algorithmen, Vorschläge und Codezeilen sind willkommen.
Dank für Ihr Interesse
Antworten:
Ich dachte nicht, dass Ihre Frage sehr klar war, aber wenn Sie nur einen eindeutigen Dateinamen benötigen ...
quelle
uuid.uuid4().hex
wäre eine bessere Wahl, siehe Details hier .Wenn Sie temporäre Dateien in Python erstellen möchten, gibt es in den Standardbibliotheken von Python ein Modul namens tempfile . Wenn Sie andere Programme starten möchten, um die Datei zu bearbeiten, verwenden Sie tempfile.mkstemp (), um Dateien zu erstellen, und os.fdopen (), um auf die von mkstemp () bereitgestellten Dateideskriptoren zuzugreifen.
Sie sagen übrigens, Sie führen Befehle aus einem Python-Programm aus? Sie sollten mit ziemlicher Sicherheit das Unterprozessmodul verwenden .
Sie können also ganz fröhlich Code schreiben, der so aussieht:
Wenn Sie dies ausführen, sollten Sie feststellen, dass der
cat
Befehl einwandfrei funktioniert hat, die temporäre Datei jedoch imfinally
Block gelöscht wurde . Beachten Sie, dass Sie haben die temporäre Datei zu löschen , dass mkstemp () selbst zurück - die Bibliothek keine Möglichkeit hat , zu wissen , wann Sie mit ihm fertig sind!(Bearbeiten: Ich hatte angenommen, dass NamedTemporaryFile genau das getan hat, wonach Sie suchen, aber das ist möglicherweise nicht so praktisch - die Datei wird sofort gelöscht, wenn das temporäre Dateiobjekt geschlossen wird, und andere Prozesse öffnen die Datei, bevor Sie sie schließen funktioniert auf einigen Plattformen nicht, insbesondere unter Windows. Entschuldigung, meinerseits scheitern.)
quelle
Das
uuid
Modul wäre eine gute Wahl. Ich bevorzuge die Verwendunguuid.uuid4().hex
als zufälliger Dateiname, da es eine hexadezimale Zeichenfolge ohne Bindestriche zurückgibt .Die Ausgänge sollten folgendermaßen aussehen:
quelle
Vielleicht benötigen Sie eine eindeutige temporäre Datei?
f ist geöffnete Datei.
delete=False
bedeutet, dass die Datei nach dem Schließen nicht gelöscht wird.Wenn Sie die Kontrolle über den Namen der Datei benötigen, gibt es optionale Argumente
prefix=...
undsuffix=...
Argumente, die Zeichenfolgen annehmen. Siehe https://docs.python.org/3/library/tempfile.html .quelle
w+b
ist die Standardeinstellungmode
. Die Verwendung vontempfile
Funktionen hat den Nachteil falscher Dateizugriffsberechtigungen:tempfile
Dokumente, dieos.O_TMPFILE
als Maske verwendet werden sollen, aber bei der normalen Dateierstellungos.umask()
.Sie können das datetime- Modul verwenden
Beachten Sie Folgendes: Ich verwende,
replace
da die Doppelpunkte in vielen Betriebssystemen in Dateinamen nicht zulässig sind.Das ist es, dies gibt Ihnen jedes Mal einen eindeutigen Dateinamen.
quelle
Ich bin auf diese Frage gestoßen und werde meine Lösung für diejenigen hinzufügen, die nach etwas Ähnlichem suchen. Mein Ansatz war nur, aus
ascii
Zeichen einen zufälligen Dateinamen zu machen . Es wird mit einer guten Wahrscheinlichkeit einzigartig sein.quelle
path.exists()
RückkehrzeitFalse
und der Zeit, zu der ein Verbraucher die Datei tatsächlich öffnet, besteht eine Race-Bedingung .Dies kann mit der eindeutigen Funktion im Modul ufp.path erfolgen .
Wenn der aktuelle Pfad in der Datei 'test.ext' vorhanden ist. Die Funktion ufp.path.unique gibt './test (d1) .ext' zurück.
quelle
Verwenden Sie zum Erstellen eines eindeutigen Dateipfads, falls vorhanden, ein zufälliges Paket, um einen neuen Zeichenfolgennamen für die Datei zu generieren. Sie können den folgenden Code für denselben verwenden.
Jetzt können Sie diesen Pfad verwenden, um eine entsprechende Datei zu erstellen.
quelle
Wenn Sie kurze eindeutige IDs als Dateinamen benötigen, versuchen Sie
shortuuid
, shortuuid verwendet Klein- und Großbuchstaben und Ziffern und entfernt ähnlich aussehende Zeichen wie l, 1, I, O und 0.verglichen mit
quelle