生成指定模式的随机文本字符串

28

我需要生成一定格式的随机文本字符串,并希望得到一些在Python中实现的思路。该格式为<8位数字><15个字符的字符串>。

5个回答

61
#!/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:]而不是另一种方式。


好答案!(我以前甚至从未见过random.choice。) - Claes Mogren
1
使用string.lowercase和string.uppercase可能更易读,而不是切片列表。此外,该解决方案仅在OP满意仅使用ASCII字符时才有效,如果他想从整个Unicode字符集生成字符串,则问题变得更加困难。 - Björn Lindqvist
1
你可以将生成器表达式作为参数传递,而不是显式地编写列表推导式:digits = "".join(random.choice(string.digits) for i in xrange(8)) - Benjamin Hodgson
18
好的回答。如果您使用的是Python 3,请将string.letters替换为string.ascii_letters,并且可以使用range()代替xrange() - Jubbles

17

查看示例-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'
>>> 

1
请注意在Python3中使用ascii_letters - loretoparisi

12

random.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))

5
在Python 3中,string.letters已被替换为string.ascii_letters。请参见:https://docs.python.org/3.1/library/string.html - Jeff Evans

4
自Python 3.6.2以来,使用random.choices可以替代random.choice,无需使用循环即可生成需要的随机字符串长度k
import random
import string
x = ''.join(random.choices(string.ascii_letters + string.digits, k=16))
print(x)

如果你需要包含标点符号的字符串,你还可以添加string.punctuation


1
这里是一个更简单的版本:
import random
import string

digits = "".join( [random.choice(string.digits+string.letters) for i in   xrange(10)] )
print digits

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接