Revisamos de forma completamente cada una de las reseñas de nuestra página web con la meta de enseñarte en todo momento información con la mayor veracidad y actual.
Solución:
Podría usar el módulo UUID para generar un aleatorio string:
import uuid
filename = str(uuid.uuid4())
Esta es una opción válida, dado que es muy poco probable que un generador de UUID produzca un identificador duplicado (un nombre de archivo, en este caso):
Solo después de generar mil millones de UUID por segundo durante los próximos 100 años, la probabilidad de crear solo un duplicado sería de alrededor del 50 %. La probabilidad de un duplicado sería de alrededor del 50% si cada persona en el mundo posee 600 millones de UUID.
Python tiene facilidades para generar nombres de archivos temporales, consulte http://docs.python.org/library/tempfile.html. Por ejemplo:
In [4]: import tempfile
Cada llamada a tempfile.NamedTemporaryFile()
da como resultado un archivo temporal diferente, y se puede acceder a su nombre con el .name
attributep.ej:
In [5]: tf = tempfile.NamedTemporaryFile()
In [6]: tf.name
Out[6]: 'c:\blabla\locals~1\temp\tmptecp3i'
In [7]: tf = tempfile.NamedTemporaryFile()
In [8]: tf.name
Out[8]: 'c:\blabla\locals~1\temp\tmpr8vvme'
Una vez que tenga el nombre de archivo único, se puede usar como cualquier archivo normal. Nota: Por defecto el archivo será eliminado cuando está cerrado. Sin embargo, si el delete
el parámetro es falso, el archivo no se elimina automáticamente.
Conjunto completo de parámetros:
tempfile.NamedTemporaryFile([mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None[, delete=True]]]]]])
también es posible especificar el prefix para el archivo temporal (como uno de los varios parámetros que se pueden proporcionar durante la creación del archivo):
In [9]: tf = tempfile.NamedTemporaryFile(prefix="zz")
In [10]: tf.name
Out[10]: 'c:\blabla\locals~1\temp\zzrc3pzk'
Se pueden encontrar ejemplos adicionales para trabajar con archivos temporales aquí
un enfoque común es agregar una marca de tiempo como prefix/sufijo al nombre del archivo para tener alguna relación temporal con el archivo. Si necesita más singularidad, aún puede agregar un aleatorio string a esto.
import datetime
basename = "mylogfile"
suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
filename = "_".join([basename, suffix]) # e.g. 'mylogfile_120508_171442'
Si te ha resultado útil este artículo, agradeceríamos que lo compartas con el resto juniors así contrubuyes a extender este contenido.