在 Python 中创建一个唯一的文件名
How to create a unique file name in Python
使用该uuid.uuid4()
方法创建一个唯一的文件名,例如
unique_filename = str(uuid.uuid4())
. 该uuid4()
方法返回一个 UUID 对象,其重复概率可忽略不计。
import uuid unique_filename = str(uuid.uuid4()) print(unique_filename) # 👉️ f82761e1-8f97-4c6a-a3af-3667808d21be unique_filename = uuid.uuid4().hex print(unique_filename) # 👉️ 65128b2ae8da4d2caea7026f8685be0f
a 被复制的概率UUID
不为零,但它非常
接近于零,可以忽略不计。
在 103 万亿个第 4 版 UUID 中找到重复项的概率是十亿分之一。
内置的uuid
模块提供了UUID
用于生成 UUID 的不可变对象和函数。
uuid4()
方法。您可以将唯一 ID 传递给str()
类,以将 UUID 转换为标准格式的十六进制数字字符串。
import uuid unique_file_name = str(uuid.uuid4()) print(unique_file_name) # 👉️ d28495ae-4636-44a3-a8dc-fc5cf6f31d5e unique_file_name = str(uuid.uuid4()) print(unique_file_name) # 👉️ eecb0a86-b3da-4a7f-919a-1088bb5777ff
如果您更愿意生成不带连字符的唯一文件名,请使用该hex
属性。
import uuid unique_file_name = uuid.uuid4().hex print(unique_file_name) # 👉️ e8f27a4918ac47bd86bea9986f4bb38f unique_file_name = uuid.uuid4().hex print(unique_file_name) # 👉️ 9943004bec4b4b0085c493e795aa383d
hex
属性将 UUID 作为 32 个字符的小写十六进制字符串返回。该hex
属性返回一个字符串,因此我们不必使用str()
该类。
如果您只需要一个唯一的文件名,那么该uuid.uuid4()
方法应该是您的首选方法。
如果您需要生成一个具有随机名称的临时文件,请使用该
tempfile.NamedTemporaryFile()
函数。
import tempfile file = tempfile.NamedTemporaryFile() print(file.name) # 👉️ /tmp/tmp281uq_28 file.close()
The
tempfile.NamedTemporaryFile
function returns a file-like object that can be used as a temporary storage
area.
name
attribute on the object to access the file’s name on the file system.By default, the file is deleted as soon as it is closed, but you can set the
delete
keyword argument to False
to keep the file.
import tempfile file = tempfile.NamedTemporaryFile(mode='w+b', delete=False) print(file.name) # 👉️ /tmp/tmplp3yjtai print(file.file) # 👉️ <_io.BufferedRandom name='/tmp/tmplp3yjtai'> file.close()
The returned object has a file
attribute that points to the underlying file
object.
prefix
and suffix
arguments if you need to tweak the name of the temporary file.import tempfile file = tempfile.NamedTemporaryFile(mode='w+b', delete=False, prefix='abc') print(file.name) # 👉️ /tmp/abclogogxys print(file.file) # 👉️ <_io.BufferedRandom name='/tmp/abclogogxys'> file.close()
The mode
parameter defaults to w+b
, so the file can be read and written
without being closed.
该w+b
模式以二进制模式打开文件进行写入和读取,如果存在则覆盖现有文件。
如果该文件不存在,则会创建一个具有给定名称的新文件。
使用二进制模式是为了使函数在所有平台上的行为一致,而不管存储的数据类型如何。