118 votes

Python : Comment créer un nom de fichier unique ?

J'ai un formulaire web en python avec deux options - Téléchargement de fichiers y zone de texte . Je dois prendre les valeurs de chacun d'eux et les transmettre à un autre programme en 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, c'est.. :

  1. Générer un nom de fichier unique
  2. Créer un fichier temporaire portant ce nom dans le répertoire de travail
  3. Enregistrer les valeurs transmises par la zone de texte dans le fichier temporaire
  4. Exécuter le programme en ligne de commande à l'intérieur de mon module python et lui transmettre 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 les bienvenus.

Merci de votre attention

4voto

Milind Deore Points 1090

Si vous avez besoin d'ID courts et uniques comme nom de fichier, essayez shortuuid , shortuuid utilise des lettres minuscules et majuscules ainsi que des chiffres, et supprime les caractères similaires tels que l, 1, I, O et 0.

>>> import shortuuid
>>> shortuuid.uuid()
'Tw8VgM47kSS5iX2m8NExNa'
>>> len(ui)
22

par rapport à

>>> import uuid
>>> unique_filename = str(uuid.uuid4())
>>> len(unique_filename)
36
>>> unique_filename
'2d303ad1-79a1-4c1a-81f3-beea761b5fdf'

1voto

behzad.nouri Points 7526

Je suis tombé sur cette question, et je vais ajouter ma solution pour ceux qui pourraient être à la recherche de quelque chose de similaire. Mon approche consistait à créer un nom de fichier aléatoire à partir de ascii caractères. Il 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)

0voto

c2o93y50 Points 183

Cela peut se faire en utilisant la fonction unique fonction dans ufp.path module.

import ufp.path
ufp.path.unique('./test.ext')

si le chemin actuel existe le fichier 'test.ext'. ufp.path.unique function return './test (d1).ext'.

0voto

RoboMex Points 555

Pour créer un chemin d'accès unique au fichier s'il existe, utilisez le paquet 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 cela.

import os
import random
import string

def getUniquePath(folder, filename):    
    path = os.path.join(folder, filename)
    while os.path.exists(path):
         path = path.split('.')[0] + ''.join(random.choice(string.ascii_lowercase) for i in range(10)) + '.' + path.split('.')[1]
    return path

Vous pouvez maintenant utiliser ce chemin pour créer des fichiers en conséquence.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X