Saltar al contenido

La mejor manera de generar nombres de archivos aleatorios en Python

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *