我一直试图找到生成的Python,可以扩展以及随机字符串的一个更Python的方式。通常情况下,我看到类似的东西随机字符串(这是正确的?)
''.join(random.choice(string.letters) for i in xrange(len))
它很糟糕,如果你想产生长字符串。
我一直在想random.getrandombits了一段时间,并找出如何将其转换成一组位,则十六进制编码。使用python 2.6我遇到了没有记录的bitarray对象。不知何故,我得到它的工作,而且看起来非常快。
它产生在短短3秒左右我的笔记本上为50Mil一个随机字符串。
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指出,这是一个奇数导致此问题的字符。添加新代码以确保始终从hex发送偶数个十六进制数字。
,如果有这只是快了这样做的更好的办法仍然好奇。
特定的长度如何使这一点,以便它只会包含数字,字母和强调? (这包括破折号)(对于i的x范围random.choice(string.letters + string.digits + “_”)(长度)) – wenbert 2010-12-30 06:49:07
@wenbert ''。加入 – yanjost 2011-08-31 09:56:54