Лучший способ генерировать случайные имена файлов в Python
В Python, что хорошо, или лучший способ генерировать некоторый случайный текст для добавления к файлу (имени), который я сохраняю на сервере, просто чтобы убедиться, что он не перезаписывается. Спасибо!
10 ответов
У Python есть возможности генерировать временные имена файлов, см. http://docs.python.org/library/tempfile.html. Например:
Каждый вызов tempfile.NamedTemporaryFile() приводит к другому временному файлу, и его имя можно получить с помощью атрибута .name , например:
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'
Как только у вас есть уникальное имя файла, оно может использоваться как любой обычный файл. Примечание. По умолчанию файл будет удален, если он закрыто. Однако, если параметр delete равен False, файл не автоматически удаляется. Полный набор параметров:
tempfile.NamedTemporaryFile([mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None[, delete=True]]]]]])
также можно указать префикс для временного файла (в качестве одного из различных параметров, который может быть предоставлен при создании файла):
In [9]: tf = tempfile.NamedTemporaryFile(prefix="zz") In [10]: tf.name Out[10]: 'c:\\blabla\\locals~1\\temp\\zzrc3pzk'
Проблема этого решения заключается в том, что оно генерирует не только имя файла, но и файл, который уже открыт. Если вам нужно временное имя файла для нового, еще не существующего файла (например, для использования в качестве вывода команды os), это не подойдет. В этом случае вы можете сделать что-то вроде str (uuid.uuid4 ()).
@Luca Спасибо за дополнительный комментарий, который полезен и отмечен для дальнейшего использования. Тем не менее, ОП четко заявил, что он / она хочет сохранить файл, следовательно, необходимо его открыть, поэтому это решение предусматривает это.
Это зависит. Возможно, ему нужно имя для создания соответствующего вызова сервера. Точно сказать не могу. Во всяком случае, ваш ответ, безусловно, более распространенный случай.
Как в Python сгенерировать наименование файла определенного формата?
Первые 4 символа я имею.
Нужно дописать оставшиеся 4 символа рандомными символами A-Z и 0-1.
К примеру имею 4255
нужно на выходе получить строку 4255А45С
Спасибо за помощь.
from random import choice from string import ascii_uppercase other_four_symbols = ''.join([choice(list(ascii_uppercase)+map(str, range(0,10))) for _ in range(4)])
list(ascii_uppercase)+map(str, range(0,10)) — делаем список из A-Z и 0-9
choice() — вытаскиваем элемент из этого списка
[choice() for _ in range(4)] — делаем выбор 4 раза
».join — объединяем в строку
Пример:
In [35]: ».join([choice(list(ascii_uppercase)+map(str, range(0,10))) for _ in range(4)])
Out[35]: ‘9ZCD’
>>> import string >>> import random >>> >>> def gen_random_chars(nrandchars): . alpha = string.ascii_uppercase + string.digits . chars = ''.join(random.choice(alpha) for _ in range(nrandchars)) . return chars . >>> def gen_name(prefix): . return prefix + gen_random_chars(4) . >>> for i in range(10): . gen_name('abcd') . 'abcdZ5VK' 'abcdT8V4' 'abcdJJCN' 'abcd92IQ' 'abcdW0QP' 'abcdNQLB' 'abcdQ1WS' 'abcdF8SG' 'abcd7WB1' 'abcdA3X3' >>>
import os import tempfile temp = tempfile.NamedTemporaryFile(prefix="456") try: print 'temp:', temp print 'temp.name:', temp.name finally: # Automatically cleans up the file temp.close() print 'Exists after close:', os.path.exists(temp.name)