Mys*_*des 84 python file unique
我有一个python web表单有两个选项 - 文件上传和textarea.我需要从每个值中获取值并将它们传递给另一个命令行程序.我可以轻松地使用文件上传选项传递文件名,但我不知道如何传递textarea的值.
我想我需要做的是:
我不知道如何生成唯一的文件名.任何人都可以给我一些关于如何生成唯一文件名的提示吗?任何算法,建议和代码行都是值得赞赏的.
感谢你的关心
Eni*_*rry 129
我认为你的问题不是很清楚,但如果你需要的只是一个独特的文件名......
import uuid
unique_filename = str(uuid.uuid4())
Run Code Online (Sandbox Code Playgroud)
Ric*_*ell 50
如果你想在Python中创建临时文件,Python的标准库中有一个名为tempfile的模块.如果要启动其他程序来操作该文件,请使用tempfile.mkstemp()创建文件,使用os.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)
Run Code Online (Sandbox Code Playgroud)
运行它,您应该发现该cat
命令运行良好,但临时文件已在finally
块中删除.请注意,您必须删除mkstemp()自己返回的临时文件 - 库无法知道您何时完成它!
(编辑:我曾假设NamedTemporaryFile完全按照你所做的那样,但这可能不那么方便 - 当临时文件对象关闭时,文件会被立即删除,并且在关闭文件之前让其他进程打开文件将无法在某些平台上运行,尤其是Windows.抱歉,我失败了.)
Gre*_* Li 25
该uuid
模块将是一个不错的选择,我更喜欢使用uuid.uuid4().hex
随机文件名,因为它将返回没有破折号的十六进制字符串.
import uuid
filename = uuid.uuid4().hex
Run Code Online (Sandbox Code Playgroud)
输出应该是这样的:
>>> import uuid
>>> uuid.uuid()
UUID('20818854-3564-415c-9edc-9262fbb54c82')
>>> str(uuid.uuid4())
'f705a69a-8e98-442b-bd2e-9de010132dc4'
>>> uuid.uuid4().hex
'5ad02dfb08a04d889e3aa9545985e304' # <-- this one
Run Code Online (Sandbox Code Playgroud)
小智 13
也许你需要独特的临时文件?
import tempfile
f = tempfile.NamedTemporaryFile(mode='w+b', delete=False)
print f.name
f.close()
Run Code Online (Sandbox Code Playgroud)
f是打开的文件.delete=False
表示关闭后不删除文件.
如果您需要简短的唯一 ID 作为文件名,请尝试shortuuid
使用小写和大写字母和数字,并删除类似的字符,例如 l、1、I、O 和 0。
>>> import shortuuid
>>> shortuuid.uuid()
'Tw8VgM47kSS5iX2m8NExNa'
>>> len(ui)
22
Run Code Online (Sandbox Code Playgroud)
相比
>>> import uuid
>>> unique_filename = str(uuid.uuid4())
>>> len(unique_filename)
36
>>> unique_filename
'2d303ad1-79a1-4c1a-81f3-beea761b5fdf'
Run Code Online (Sandbox Code Playgroud)
小智 6
您可以使用datetime模块
import datetime
uniq_filename = str(datetime.datetime.now().date()) + '_' + str(datetime.datetime.now().time()).replace(':', '.')
Run Code Online (Sandbox Code Playgroud)
请注意:我正在使用,replace
因为许多操作系统中的文件名中不允许使用冒号.
就是这样,每次都会给你一个独特的文件名.