当前位置: 首页 > 面试题库 >

Python 2.6中的随机字符串(可以吗?)

严劲
2023-03-14
问题内容

我一直在尝试寻找一种更pythonic的方法来在python中生成可扩展的随机字符串。通常,我看到类似

''.join(random.choice(string.letters) for i in xrange(len))

如果要生成长字符串,它很烂。

我一直在考虑random.getrandombits一段时间,并弄清楚如何将其转换为位数组,然后对其进行十六进制编码。使用python
2.6我遇到了bitarray对象,该文档未记录。我以某种方式使它工作,而且看起来真的很快。

它会在大约3秒钟内在我的笔记本上生成一个5000万随机字符串。

def rand1(leng):
    nbits = leng * 6 + 1
    bits = random.getrandbits(nbits)
    uc = u"%0x" % bits
    newlen = int(len(uc) / 2) * 2 # we have to make the string an even length
    ba = bytearray.fromhex(uc[:newlen])
    return base64.urlsafe_b64encode(str(ba))[:leng]

编辑

heikogerlach指出,导致此问题的字符数量奇多。添加了新代码以确保始终从十六进制发送偶数个十六进制数字。

仍然好奇是否有更快的方法可以做到这一点。


问题答案:

import os
random_string = os.urandom(string_length)

以及是否需要url安全字符串:

import os
random_string = os.urandom(string_length).hex()

(请注意,在这种情况下,random_string的长度大于string_length的长度)



 类似资料: