Python:如何创build一个唯一的文件名?
我有一个Python Web表单有两个选项 – file upload和textarea 。 我需要从每个值中取出值并传递给另一个命令行程序。 我可以很容易地通过file upload选项的文件名,但我不知道如何传递textarea的值。
我想我需要做的是:
- 生成一个唯一的文件名
- 在工作目录中创build一个具有该名称的临时文件
- 将从textarea传入的值保存到临时文件中
- 从我的python模块执行命令行程序,并将其传递给临时文件的名称
我不知道如何生成一个唯一的文件名。 任何人都可以给我一些关于如何生成一个唯一的文件名的提示? 任何algorithm,build议和代码行赞赏。
感谢你的关心
我不认为你的问题是非常清楚的,但如果你只需要一个独特的文件名…
import uuid unique_filename = str(uuid.uuid4())
如果你想用Python创build临时文件,那么在Python的标准库中有一个名为tempfile的模块。 如果要启动其他程序来操作文件,请使用tempfile.mkstemp()创build文件,使用os.fdopen()访问mkstemp()为您提供的文件描述符。
顺便说一句,你说你正在运行Python程序的命令? 你几乎可以肯定使用subprocess模块。
所以你可以很高兴地编写看起来像这样的代码:
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()返回的临时文件 – 图书馆无法知道您何时完成!
(编辑:我已经假定NamedTemporaryFile做了你究竟是什么,但可能不是那么方便 – 文件被临时删除临时文件对象closures时,并有其他进程打开文件,然后再closures它将无法在一些平台上运行,特别是Windows。抱歉,我的部分失败了。)
也许你需要独特的临时文件?
import tempfile f = NamedTemporaryFile(mode='w+b', delete=False) print f.name f.close()
f打开文件。 delete = False表示closures后不要删除文件
uuid
模块将是一个不错的select,我更喜欢使用uuid.uuid4().hex
作为随机文件名,因为它会返回一个没有破折号的hexstring 。
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
我遇到了这个问题,我会为那些可能正在寻找类似的人添加我的解决scheme。 我的方法是从ascii
字符中随机创build一个文件名。 这将是一个很好的概率独特。
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.path模块中的独特function来完成。
import ufp.path ufp.path.unique('./test.ext')
如果当前path存在'test.ext'文件。 ufp.path.unique函数返回'./test(d1).ext'。
请参阅示例: 在filepath或dirpath中生成唯一path[Python]
您可以使用date时间模块
import datetime uniq_filename = str(datetime.datetime.now().date()) + '_' + str(datetime.datetime.now().time()).replace(':', '.')
请注意:我正在使用replace
因为冒号在许多操作系统中不允许使用文件名。
就是这样,每次都会给你一个唯一的文件名。