Best way to generate random file names in Python Best way to generate random file names in Python python python

Best way to generate random file names in Python


You could use the UUID module for generating a random string:

import uuidfilename = str(uuid.uuid4())

This is a valid choice, given that an UUID generator is extremely unlikely to produce a duplicate identifier (a file name, in this case):

Only after generating 1 billion UUIDs every second for the next 100 years, the probability of creating just one duplicate would be about 50%. The probability of one duplicate would be about 50% if every person on earth owns 600 million UUIDs.


Python has facilities to generate temporary file names, see http://docs.python.org/library/tempfile.html. For instance:

In [4]: import tempfile

Each call to tempfile.NamedTemporaryFile() results in a different temp file, and its name can be accessed with the .name attribute, e.g.:

In [5]: tf = tempfile.NamedTemporaryFile()In [6]: tf.nameOut[6]: 'c:\\blabla\\locals~1\\temp\\tmptecp3i'In [7]: tf = tempfile.NamedTemporaryFile()In [8]: tf.nameOut[8]: 'c:\\blabla\\locals~1\\temp\\tmpr8vvme'

Once you have the unique filename it can be used like any regular file. Note: By default the file will be deleted when it isclosed. However, if the delete parameter is False, the file is notautomatically deleted.

Full parameter set:

tempfile.NamedTemporaryFile([mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None[, delete=True]]]]]])

it is also possible to specify the prefix for the temporary file (as one of the various parameters that can be supplied during the file creation):

In [9]: tf = tempfile.NamedTemporaryFile(prefix="zz")In [10]: tf.nameOut[10]: 'c:\\blabla\\locals~1\\temp\\zzrc3pzk'

Additional examples for working with temporary files can be found here


a common approach is to add a timestamp as a prefix/suffix to the filename to have some temporal relation to the file. If you need more uniqueness you can still add a random string to this.

import datetimebasename = "mylogfile"suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")filename = "_".join([basename, suffix]) # e.g. 'mylogfile_120508_171442'