J'ai un python avec deux options - Téléchargement de fichier et textarea. Je dois prendre les valeurs de chacune et les transmettre à Un autre programme en ligne de commande.Je peux facilement transmettre le nom de fichier avec les options de téléchargement, mais je ne sais pas comment transmettre la valeur de textarea.
Je pense que ce que je dois faire est:
Je ne sais pas comment générer un nom de fichier unique. Quelqu'un peut-il me donner des conseils sur la manière de générer un nom de fichier unique? Tous les algorithmes, suggestions et lignes de code sont appréciés.
Merci pour votre sollicitude
Je ne pensais pas que votre question était très claire, mais si vous avez simplement besoin d’un nom de fichier unique ...
import uuid
unique_filename = str(uuid.uuid4())
Si vous voulez créer des fichiers temporaires en Python, il existe un module appelé tempfile dans les bibliothèques standard de Python. Si vous souhaitez lancer d'autres programmes pour fonctionner sur le fichier, utilisez tempfile.mkstemp () pour créer des fichiers et os.fdopen () pour accéder aux descripteurs de fichier fournis par mkstemp ().
Incidemment, vous dites que vous exécutez des commandes à partir d'un programme Python? Vous devriez certainement utiliser le module sous-processus .
Vous pouvez donc écrire un code qui ressemble à ceci:
import subprocess
import tempfile
import os
(fd, filename) = tempfile.mkstemp()
try:
tfile = os.fdopen(fd, "w")
tfile.write("Hello, world!\n")
tfile.close()
subprocess.Popen(["/bin/cat", filename]).wait()
finally:
os.remove(filename)
En exécutant cela, vous devriez constater que la commande cat
a parfaitement fonctionné, mais que le fichier temporaire a été supprimé du bloc finally
. Sachez que vous devez pour supprimer le fichier temporaire que mkstemp () vous renvoie - la bibliothèque n'a aucun moyen de savoir quand vous en aurez fini!
(Edit: j'avais supposé que NamedTemporaryFile faisait exactement ce que vous recherchiez, mais ce n'est peut-être pas très pratique: le fichier est supprimé immédiatement lorsque l'objet de fichier temporaire est fermé, et les autres processus l'ouvrent avant que vous ne l'ayez fermé. ne fonctionnera pas sur certaines plates-formes, notamment Windows. Désolé, échec de ma part.)
Le module uuid
serait un bon choix. Je préfère utiliser uuid.uuid4().hex
comme nom de fichier aléatoire car il renverra ne chaîne hexagonale sans tirets.
import uuid
filename = uuid.uuid4().hex
Les sorties devraient ressembler à ceci:
>>> import uuid
>>> uuid.uuid()
UUID('20818854-3564-415c-9edc-9262fbb54c82')
>>> str(uuid.uuid4())
'f705a69a-8e98-442b-bd2e-9de010132dc4'
>>> uuid.uuid4().hex
'5ad02dfb08a04d889e3aa9545985e304' # <-- this one
Peut-être avez-vous besoin d'un fichier temporaire unique?
import tempfile
f = tempfile.NamedTemporaryFile(mode='w+b', delete=False)
print f.name
f.close()
f est un fichier ouvert. delete=False
signifie que vous ne supprimez pas le fichier après la fermeture.
Vous pouvez utiliser le module datetime
import datetime
uniq_filename = str(datetime.datetime.now().date()) + '_' + str(datetime.datetime.now().time()).replace(':', '.')
Notez que: J'utilise replace
car les deux points ne sont pas autorisés dans les noms de fichiers dans de nombreux systèmes d'exploitation.
Ça y est, cela vous donnera un nom de fichier unique à chaque fois.
Je suis tombé sur cette question, et je vais ajouter ma solution pour ceux qui cherchent peut-être quelque chose de similaire. Mon approche consistait simplement à créer un nom de fichier aléatoire à partir de ascii
caractères. Ce sera unique avec une bonne probabilité.
from random import sample
from string import digits, ascii_uppercase, ascii_lowercase
from tempfile import gettempdir
from os import path
def Rand_fname(suffix, length=8):
chars = ascii_lowercase + ascii_uppercase + digits
fname = path.join(gettempdir(), 'tmp-'
+ ''.join(sample(chars, length)) + suffix)
return fname if not path.exists(fname) \
else Rand_fname(suffix, length)
Cela peut être fait en utilisant la fonction nique dans le module fp.path.
import ufp.path
ufp.path.unique('./test.ext')
si le chemin actuel existe, le fichier 'test.ext'. La fonction ufp.path.unique renvoie './test (d1) .ext'.