Random filenames
In Python:
import os.path, random, string
def random_filename(chars=string.hexchars, length=16, prefix='',
suffix='', verify=True, attempts=10):
for attempt in range(attempts):
filename = ''.join([random.choice(chars) for i in range(length)])
filename = prefix + filename + suffix
if not verify or not os.path.exists(filename):
return filename
>>> random_filename()
'DC53e02B08eF47e9'
>>> random_filename(chars='hi', length=32)
'hhhihihhhiiihhhihhiiiiiihhhhiihh'
>>> random_filename(prefix='username', suffix='.txt')
'username7dbd29aBdD25BeB9.txt'
# returns None if it can't find a filename
>>> open('xxx', 'w').close()
>>> str(random_filename(chars='x', length=3))
'None'
In Ruby:
def random_filename(opts={})
opts = {:chars => ('0'..'9').to_a + ('A'..'F').to_a + ('a'..'f').to_a,
:length => 16, :prefix => '', :suffix => '',
:verify => true, :attempts => 10}.merge(opts)
opts[:attempts].times do
filename = ''
opts[:length].times do
filename << opts[:chars][rand(opts[:chars].size)]
end
filename = opts[:prefix] + filename + opts[:suffix]
return filename unless opts[:verify] && File.exists?(filename)
end
nil
end