首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python2.6中的随机字符串(这样可以吗?)

Python2.6中的随机字符串(这样可以吗?)
EN

Stack Overflow用户
提问于 2009-04-24 09:01:30
回答 5查看 45.1K关注 0票数 77

我一直在努力寻找一种在python中生成随机字符串的更具python风格的方法,而且还可以扩展。通常,我看到的内容类似于

代码语言:javascript
复制
''.join(random.choice(string.letters) for i in xrange(len))

如果你想生成长字符串,那就太糟糕了。

我已经考虑了一段时间的random.getrandombits,并弄清楚如何将其转换为位数组,然后对其进行十六进制编码。在使用python 2.6时,我遇到了bitarray对象,它没有文档。不知何故,我让它工作了,而且它看起来真的很快。

它会在3秒内在我的笔记本上生成一个50mil的随机字符串。

代码语言:javascript
复制
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指出,是奇数个字符导致了这个问题。添加了新的代码,以确保它始终从十六进制发送偶数个十六进制数字。

仍然很好奇是否有更好的方法来做这件事,而且速度也一样快。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-04-24 09:09:39

代码语言:javascript
复制
import os
random_string = os.urandom(string_length)

如果你需要url安全字符串:

代码语言:javascript
复制
import os
random_string = os.urandom(string_length).hex() 

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

票数 130
EN

Stack Overflow用户

发布于 2012-08-31 23:32:38

有时uuid很短,如果你不喜欢破折号,你可以always.replace('-','')它们

代码语言:javascript
复制
from uuid import uuid4

random_string = str(uuid4())

如果你想让它有一个特定的长度而不是破折号

代码语言:javascript
复制
random_string_length = 16
str(uuid4()).replace('-', '')[:random_string_length]
票数 10
EN

Stack Overflow用户

发布于 2009-04-24 17:04:55

摘自Python.org上的1023290错误报告:

代码语言:javascript
复制
junk_len = 1024
junk =  (("%%0%dX" % junk_len) % random.getrandbits(junk_len *
8)).decode("hex")

另请参阅问题9236431023290

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/785058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档