Python: как создать уникальное имя файла?
У меня есть веб-форма python с двумя вариантами -загрузить и textarea. Мне нужно взять значения из каждого и передать их в другую программу командной строки. Я могу легко передать имя файла с параметрами загрузки файла, но я не уверен, как передать значение textarea.
Я думаю, что мне нужно делать-это:
- создать уникальное имя файла
- создать временный файл с таким именем в рабочем каталог
- сохраните значения, переданные из textarea во временный файл
- выполните программу командной строки из моего модуля python и передайте ему имя временного файла
Я не уверен, как генерировать уникальное имя файла. Кто-нибудь может дать мне несколько советов о том, как генерировать уникальное имя файла? Любые алгоритмы, предложения и строки кода приветствуются.
Спасибо за заботу
7 ответов:
Я не думаю, что ваш вопрос был очень ясен, но если все, что вам нужно-это уникальное имя файла...
import uuid unique_filename = str(uuid.uuid4())
Если вы хотите, чтобы временные файлы в Python есть модуль под названием tempfile в стандартных библиотеках Python. Если вы хотите запустить другие программы для работы с файлом, используйте tempfile.на mkstemp() для создания файлов, и ОС.fdopen() для доступа к файловым дескрипторам, которые предоставляет mkstemp ().
Кстати, вы говорите, что вы запускаете команды из программы Python? Вы почти наверняка должны использовать подпроцесс модуль.
Так вы можно довольно весело написать код, который выглядит так:
import subprocess import tempfile import os (fd, filename) = tempfile.mkstemp() try: tfile = os.fdopen(fd, "w") tfile.write("Hello, world!\n") tfile.close() subprocess.Popen(["/bin/cat", filename]).wait() finally: os.remove(filename)
запустив это, вы должны найти, что
cat
команда работала отлично, но временный файл был удален вfinally
блок. Знайте, что вы есть чтобы удалить временный файл, который возвращает mkstemp () - библиотека не может знать, когда вы закончите с ним!(Edit: я предполагал, что NamedTemporaryFile сделал именно то, что вам нужно, но это может быть не так удобно-файл удаляется сразу же после закрытия объекта temp file, и если другие процессы откроют файл до того, как вы его закроете, он не будет работать на некоторых платформах, в частности Windows. Извините, не получилось с моей стороны.)
The
uuid
модуль был бы хорошим выбором, я предпочитаю использоватьuuid.uuid4().hex
как случайное имя файла, потому что он будет возвращать hex строка без прочерка.import uuid filename = uuid.uuid4().hex
выходы должны выглядеть так:
>>> import uuid >>> uuid.uuid() UUID('20818854-3564-415c-9edc-9262fbb54c82') >>> str(uuid.uuid4()) 'f705a69a-8e98-442b-bd2e-9de010132dc4' >>> uuid.uuid4().hex '5ad02dfb08a04d889e3aa9545985e304' # <-- this one
возможно, Вам нужен уникальный временный файл?
import tempfile f = tempfile.NamedTemporaryFile(mode='w+b', delete=False) print f.name f.close()
F-это открытый файл.
delete=False
означает не удалять файл после закрытия.
можно использовать datetime модуль
import datetime uniq_filename = str(datetime.datetime.now().date()) + '_' + str(datetime.datetime.now().time()).replace(':', '.')
обратите внимание, что: Я использую
replace
так как двоеточия не допускаются в именах файлов во многих операционных системах.вот и все, это даст вам уникальное имя файла каждый раз.
я наткнулся на этот вопрос, и я добавлю свое решение для тех, кто может искать что-то подобное. Мой подход был просто сделать случайное имя файла из
ascii
символы. Он будет уникальным с хорошей вероятностью.from random import sample from string import digits, ascii_uppercase, ascii_lowercase from tempfile import gettempdir from os import path def rand_fname(suffix, length=8): chars = ascii_lowercase + ascii_uppercase + digits fname = path.join(gettempdir(), 'tmp-' + ''.join(sample(chars, length)) + suffix) return fname if not path.exists(fname) \ else rand_fname(suffix, length)
Это можно сделать с помощью уникальный на ufp.путь модуль.
import ufp.path ufp.path.unique('./test.ext')
если текущий путь существует тест.доб ' файл. ufp.путь.уникальная функция возврата './испытание (Д1).доб.
пример : создать уникальный путь в filepath или dirpath [Python]