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

Vij*_*Dev 17 python string random

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

Jay*_*Jay 51

#!/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
Run Code Online (Sandbox Code Playgroud)

编辑:喜欢使用random.choice比randint()更好的想法,所以我更新了代码以反映这一点.

注意:这假定需要小写和大写字符.如果只有小写,则将第二个列表理解更改为:

chars = "".join( [random.choice(string.letters[:26]) for i in xrange(15)] )
Run Code Online (Sandbox Code Playgroud)

显然,对于大写只有你可以翻转它,所以切片是[26:]而不是相反.

  • 很好的答案.如果您使用的是Python 3,请将`string.letters`替换为`string.ascii_letters`,并使用`range()`代替`xrange()`. (11认同)

gim*_*mel 16

查看示例 - 配方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'
>>> 
Run Code Online (Sandbox Code Playgroud)


Dev*_*evi 7

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))
Run Code Online (Sandbox Code Playgroud)

  • 在 Python 3 中,`string.letters` 已被替换为 `string.ascii_letters`。请参阅:https://docs.python.org/3.1/library/string.html (5认同)