在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()