我需要生成一定格式的随机文本字符串,并希望得到一些在Python中实现的思路。该格式为<8位数字><15个字符的字符串>。
#!/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:]而不是另一种方式。
查看示例-Recipe 59873:随机密码生成。
在此基础上,这里提供了一个解决您问题的方案:
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'
>>>
ascii_letters
。 - loretoparisirandom.sample
是一个可供选择的方法。如在python.org文档中所述,其不会重复采样。因此,random.sample(string.letters, 53)
将导致ValueError
错误。如果您需要生成一个包含八个数字和十五个字符的随机字符串,则可以编写以下代码:
import random, string
digits = ''.join(random.sample(string.digits, 8))
chars = ''.join(random.sample(string.letters, 15))
string.letters
已被替换为string.ascii_letters
。请参见:https://docs.python.org/3.1/library/string.html - Jeff Evansrandom.choices
可以替代random.choice
,无需使用循环即可生成需要的随机字符串长度k。import random
import string
x = ''.join(random.choices(string.ascii_letters + string.digits, k=16))
print(x)
如果你需要包含标点符号的字符串,你还可以添加string.punctuation
。
import random
import string
digits = "".join( [random.choice(string.digits+string.letters) for i in xrange(10)] )
print digits
digits = "".join(random.choice(string.digits) for i in xrange(8))
- Benjamin Hodgsonstring.letters
替换为string.ascii_letters
,并且可以使用range()
代替xrange()
。 - Jubbles