27

我需要生成特定格式的随机文本字符串。想要一些想法,以便我可以用 Python 对其进行编码。格式为<8 位数字><15 字符串>。

4

5 回答 5

60
#!/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:] 而不是相反。

于 2008-12-15T06:19:22.450 回答
17

查看示例 -配方 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'
>>> 
于 2008-12-15T06:18:07.740 回答
12

random.sample是另一种选择。可以在python.org 文档中找到不同之处在于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))
于 2013-01-07T11:56:05.980 回答
2

自 python 3.6.2 以来的较短版本random.choices,具有over random.choice 不需要 for 循环,而是只传递k,所需的随机字符串的长度。

import random
import string
x = ''.join(random.choices(string.ascii_letters + string.digits, k=16))
print(x)

string.punctuation如果您需要带有标点字符的字符串,您也可以添加。

于 2020-08-22T14:43:26.023 回答
1

这是一个更简单的版本:

import random
import string

digits = "".join( [random.choice(string.digits+string.letters) for i in   xrange(10)] )
print digits
于 2015-05-03T04:36:47.833 回答