我需要生成特定格式的随机文本字符串。想要一些想法,以便我可以用Python编写代码。格式是< 8位数>< 15字符串>。
答案 0 :(得分:50)
#!/usr/bin/python
import random
import string
digits = "".join( [random.choice(string.digits) for i in xrange(8)] )
chars = "".join( [random.choice(string.letters) for i in xrange(15)] )
print digits + chars
编辑:喜欢使用random.choice比randint()更好的想法,所以我更新了代码来反映这一点。
注意:这假定需要小写和大写字符。如果只有小写,则将第二个列表推导更改为:
chars = "".join( [random.choice(string.letters[:26]) for i in xrange(15)] )
显然,对于大写字母,你可以只是翻转它,所以切片是[26:]而不是相反。
答案 1 :(得分:16)
查看示例 - Recipe 59873: Random Password Generation 。
在食谱的基础上,这是您问题的解决方案:
from random import choice
import string
def GenPasswd2(length=8, chars=string.letters + string.digits):
return ''.join([choice(chars) for i in range(length)])
>>> GenPasswd2(8,string.digits) + GenPasswd2(15,string.ascii_letters)
'28605495YHlCJfMKpRPGyAw'
>>>
答案 2 :(得分:5)
random.sample
是另一种选择。可以在python.org documentation中找到的差异是random.sample
样本没有替换。因此,random.sample(string.letters, 53)
会产生ValueError
。然后,如果你想生成八位数和十五个字符的随机字符串,你可以写
import random, string
digits = ''.join(random.sample(string.digits, 8))
chars = ''.join(random.sample(string.letters, 15))
答案 3 :(得分:1)
这是一个更简单的版本:
import random
import string
digits = "".join( [random.choice(string.digits+string.letters) for i in xrange(10)] )
print digits
答案 4 :(得分:0)
更短的版本,其中random.choices
位于random.choice之上,不需要for循环,只需传递 k ,所需的随机字符串的长度。
import random
import string
x = ''.join(random.choices(string.ascii_letters + string.digits, k=16))
print(x)
如果需要带标点符号的字符串,也可以添加string.punctuation
。