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

时间:2008-12-15 06:03:41

标签: python string random

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

5 个答案:

答案 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)

从python 3.6.2开始

更短的版本,其中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