产生在Python随机文件名的最佳方式(Best way to generate random fi

2019-06-24 06:16发布

在Python中,什么是好的,或者产生一些随机的文字时,预先准备的是我保存到服务器上的文件(名称),只是为了确保它不会覆盖的最佳途径。 谢谢!

Answer 1:

Python有设施产生的临时文件名,请参阅http://docs.python.org/library/tempfile.html 。 例如:

In [4]: import tempfile

给每个呼叫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'

与临时文件工作的其他例子,可以发现这里



Answer 2:

您可以使用UUID模块生成一个随机字符串:

import uuid
filename = str(uuid.uuid4())

这是一个有效的选择,因为一个UUID发电机是极不可能产生重复的标识(文件名,在这种情况下):

只有一点产生十亿的UUID每秒未来100年后,创建只有一个重复的概率会约50%。 如果地球上的每一个人拥有6点亿的UUID一个重复的概率会约50%。



Answer 3:

常用的方法是添加时间戳作为前缀/后缀的文件名有一定时间关系的文件。 如果你需要更多的独特性,你可以随机字符串还添加了这一点。

import datetime
basename = "mylogfile"
suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
filename = "_".join([basename, suffix]) # e.g. 'mylogfile_120508_171442'


Answer 4:

该任择议定书要求创建随机文件名不是随机的文件 。 时报UUID可碰撞。 如果你在一台机器(不共享文件系统)和你的进程/线程不会在itselfk践踏工作,使用os.getpid()来获得自己的PID,并以此作为唯一的文件名的元素。 其他进程显然不会得到相同的PID。 如果你是多线程的,获得线程ID。 如果你有你的代码,其中一个线程或进程可能会产生多种不同的临时文件的其他方面,你可能需要使用另一种技术。 轮动指数可以工作(如果你没有让他们这么久或使用这么多的文件,你会担心侧翻)。 保持一个全球性的散列/索引“活动”的文件就足够了在这种情况下。

因此,对于冗长的解释很抱歉,但它确实取决于你的具体使用情况。



Answer 5:

如果你想保留原始文件名作为新的文件名的一部分,unifom长度的唯一的前缀可以通过generted:

def add_prefix(filename):

  from hashlib import md5
  from time import localtime

  return "%s_%s" % (md5(str(localtime())).hexdigest(), filename)

调用到àdd_prefix(“的style.css”)等生成序列:

a38ff35794ae366e442a0606e67035ba_style.css
7a5f8289323b0ebfdbc7c840ad3cb67b_style.css


Answer 6:

如果您不需要的文件路径,但是必须在预定的长度,你可以使用类似这样的随机字符串。

import random
import string

file_name = ''.join([random.choice(string.ascii_lowercase) for i in range(16)])


Answer 7:

在这里添加我的两分钱:

In [19]: tempfile.mkstemp('.png', 'bingo', '/tmp')[1]
Out[19]: '/tmp/bingoy6s3_k.png'

据蟒蛇文档的tempfile.mkstemp,它会在可能的最安全的方式临时文件。 请注意,该文件将在此调用后存在:

In [20]: os.path.exists(tempfile.mkstemp('.png', 'bingo', '/tmp')[1])
Out[20]: True


Answer 8:

我个人更喜欢有我的文字不只是随机/独特而美丽的为好,这就是为什么我喜欢的hashids lib下,生成好看的整数随机文本。 可以通过安装

pip install hashids

片段:

import hashids
hashids = hashids.Hashids(salt="this is my salt", )
print hashids.encode(1, 2, 3)
>>> laHquq

简短的介绍:

Hashids是产生短的,独特的,非顺序从数字ID的小开源库。



Answer 9:

您可以使用随机包装:

import random
file = random.random()


文章来源: Best way to generate random file names in Python