Python: Comment créer un nom de fichier unique?
J'ai un python formulaire web avec deux options - de téléchargement de Fichiers et textarea. J'ai besoin de prendre les valeurs de chacun et de les transmettre à un autre programme de ligne de commande. Je peux facilement passer le nom de fichier avec des options de téléchargement de fichiers, mais je ne suis pas sûr de la façon de transmettre la valeur du textarea.
Je pense que ce que j'ai à faire est:
- Générer un nom de fichier unique
- Créer un fichier temporaire avec ce nom dans le répertoire de travail
- Enregistrer les valeurs passées du textarea dans le fichier temporaire
- Exécuter la ligne de commande du programme à partir de l'intérieur de mon module python et passent le nom du fichier temporaire
Je ne suis pas sûr de la façon de générer un nom de fichier unique. Quelqu'un peut-il me donner quelques conseils sur la façon de générer un nom de fichier unique? Des algorithmes, des suggestions et des lignes de code sont appréciés.
Merci pour votre préoccupation
- J'ai édité votre question pour essayer et de le rendre plus clair. Permettez-moi de savoir si j'ai interprété quelque chose de mal!
Vous devez vous connecter pour publier un commentaire.
Je ne pense pas que votre question est très claire, mais si vous avez besoin d'un nom de fichier unique...
uuid.uuid4().hex
serait un meilleur choix, voir les détails de ici.Si vous voulez faire des fichiers temporaires en Python, il y a un module appelé tempfile en Python bibliothèques standard. Si vous voulez lancer d'autres programmes pour fonctionner sur le fichier, utilisez le fichier temporaire.mkstemp() pour créer des fichiers et du système d'exploitation.fonction() pour accéder au fichier des descripteurs de mkstemp() vous donne.
D'ailleurs, vous dites que vous êtes d'exécution de commandes à partir d'un programme en Python? Vous devriez presque certainement être à l'aide de la sous-processus module.
De sorte que vous pouvez tout à fait gaiement écrire du code qui ressemble à ceci:
Cours d'exécution, vous devriez trouver que la
cat
commande a fonctionné parfaitement bien, mais le fichier temporaire a été supprimé dans lefinally
bloc. Sachez que vous ont pour supprimer le fichier temporaire qui mkstemp() retourne-toi - la bibliothèque a aucun moyen de savoir quand vous avez fini avec elle!(Edit: j'avais présumé que NamedTemporaryFile fait exactement ce que vous êtes après, mais qui pourrait ne pas être si pratique - le fichier est supprimé immédiatement lorsque la température de l'objet fichier est fermé, et en ayant d'autres procédés d'ouvrir le fichier avant que vous avez fermé il ne fonctionne pas sur certaines plates-formes, notamment Windows. Désolé, fail de ma part.)
La
uuid
module serait un bon choix, je préfère utiliseruuid.uuid4().hex
comme nom de fichier aléatoire, car il va revenir une chaîne hexadécimale sans tirets.Les sorties doivent comme ceci:
Peut-être vous avez besoin de fichier temporaire unique?
f est ouvert le fichier.
delete=False
signifie de ne pas supprimer le fichier après la clôture.w+b
est la valeur par défautmode
. L'utilisation de touttempfile
fonctionnalité a l'inconvénient de fichier incorrect autorisations d'accès:tempfile
documents à utiliseros.O_TMPFILE
comme masque, mais c'est normal de création de fichier respecteos.umask()
.Vous pouvez utiliser le datetime module
Noter que:
Je suis à l'aide de
replace
depuis les deux points ne sont pas autorisés dans les noms de fichiers dans de nombreux systèmes d'exploitation.Que c'est, cela va vous donner un nom unique à chaque fois.
Je suis tombé sur cette question, et je vais ajouter ma solution pour ceux qui recherchent quelque chose de similaire. Mon approche était juste pour faire un nom de fichier aléatoire de
ascii
caractères. Il sera unique avec une bonne probabilité.path.exists()
retourneFalse
et le temps que le consommateur fait ouvre le fichier.Cela peut être fait à l'aide de la unique fonction dans ufp.chemin module.
si le chemin existe de test.ext' fichier. ufp.chemin d'accès.fonction unique de retour './test (d1).ext'.
Pour créer un unique chemin d'accès au fichier si sa existe, l'utilisation aléatoire de package pour générer une nouvelle chaîne de nom de fichier. Vous pouvez consulter ci-dessous le code pour le même.
Maintenant, vous pouvez utiliser cette voie pour créer le fichier en conséquence.