J'ai un formulaire Web python avec deux options - Téléchargement de fichier et zone de texte . Je dois prendre les valeurs de chacun et les transmettre à un autre programme de ligne de commande. Je peux facilement transmettre le nom du fichier avec les options de téléchargement de fichier, mais je ne sais pas comment transmettre la valeur de la zone de texte.
Je pense que ce que je dois faire est:
- Générer un nom de fichier unique
- Créez un fichier temporaire avec ce nom dans le répertoire de travail
- Enregistrez les valeurs passées de textarea dans le fichier temporaire
- Exécutez le programme en ligne de commande depuis mon module python et transmettez-lui le nom du fichier temporaire
Je ne sais pas comment générer un nom de fichier unique. Quelqu'un peut-il me donner des conseils sur la façon de générer un nom de fichier unique? Tous les algorithmes, suggestions et lignes de code sont appréciés.
Merci pour votre préoccupation
Réponses:
Je ne pense pas que votre question soit très claire, mais si vous n'avez besoin que d'un nom de fichier unique ...
la source
uuid.uuid4().hex
serait un meilleur choix, voir les détails ici .Si vous souhaitez 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 opérer sur le fichier, utilisez tempfile.mkstemp () pour créer des fichiers, et os.fdopen () pour accéder aux descripteurs de fichiers que mkstemp () vous donne.
Incidemment, vous dites que vous exécutez des commandes à partir d'un programme Python? Vous devriez certainement utiliser le module de sous - processus .
Vous pouvez donc écrire assez joyeusement du code qui ressemble à:
En exécutant cela, vous devriez constater que la
cat
commande a parfaitement fonctionné, mais le fichier temporaire a été supprimé dans lefinally
bloc. Sachez que vous devez supprimer le fichier temporaire que mkstemp () vous renvoie - la bibliothèque n'a aucun moyen de savoir quand vous en avez terminé!(Edit: j'avais supposé que NamedTemporaryFile faisait exactement ce que vous recherchez, mais cela pourrait ne pas être si pratique - le fichier est supprimé immédiatement lorsque l'objet de fichier temporaire est fermé, et d'autres processus ouvrent le fichier avant de le fermer ne fonctionnera pas sur certaines plates-formes, notamment Windows. Désolé, échoue de ma part.)
la source
Le
uuid
module serait un bon choix, je préfère l'utiliseruuid.uuid4().hex
comme nom de fichier aléatoire car il renverra une chaîne hexadécimale sans tirets .Les sorties devraient ressembler à ceci:
la source
Peut-être avez-vous besoin d'un fichier temporaire unique?
f est un fichier ouvert.
delete=False
signifie ne pas supprimer le fichier après la fermeture.Si vous avez besoin de contrôler le nom du fichier, il existe des arguments optionnels
prefix=...
etsuffix=...
qui acceptent des chaînes. Voir https://docs.python.org/3/library/tempfile.html .la source
w+b
est la valeur par défautmode
. L'utilisation de n'importe quelletempfile
fonctionnalité présente l'inconvénient des autorisations d'accès aux fichiers incorrectes:tempfile
documents à utiliseros.O_TMPFILE
comme masque, mais la création de fichiers normale respecteos.umask()
.Vous pouvez utiliser le module datetime
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.Voilà, cela vous donnera un nom de fichier unique à chaque fois.
la source
Je suis tombé sur cette question, et j'ajouterai ma solution pour ceux qui recherchent 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é.la source
path.exists()
retourFalse
et l'heure à laquelle un consommateur ouvre réellement le fichier.Cela peut être fait en utilisant la fonction unique du module ufp.path .
si le chemin actuel existe dans le fichier 'test.ext'. ufp.path.unique function return './test (d1) .ext'.
la source
Pour créer un chemin de fichier unique s'il existe, utilisez un package aléatoire pour générer un nouveau nom de chaîne pour le fichier. Vous pouvez vous référer au code ci-dessous pour le même.
Vous pouvez maintenant utiliser ce chemin pour créer un fichier en conséquence.
la source
Si vous avez besoin d'identifiants uniques courts comme nom de fichier, essayez
shortuuid
, shortuuid utilise des lettres et des chiffres minuscules et majuscules, et supprime les caractères similaires tels que l, 1, I, O et 0.par rapport à
la source