如何生成大小为N的字符串,由数字和大写英文字母组成,例如:

6个754z4英国U911K4型


当前回答

一种更快、更简单、更灵活的方法是使用strgen模块(pip-installStringGenerator)。

生成包含大写字母和数字的6个字符随机字符串:

>>> from strgen import StringGenerator as SG
>>> SG("[\u\d]{6}").render()
u'YZI2CI'

获取唯一列表:

>>> SG("[\l\d]{10}").render_list(5,unique=True)
[u'xqqtmi1pOk', u'zmkWdUr63O', u'PGaGcPHrX2', u'6RZiUbkk2i', u'j9eIeeWgEF']

保证字符串中有一个“特殊”字符:

>>> SG("[\l\d]{10}&[\p]").render()
u'jaYI0bcPG*0'

随机HTML颜色:

>>> SG("#[\h]{6}").render()
u'#CEdFCa'

我们需要意识到:

''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(N))

可能没有数字(或大写字符)。

strgen在开发时间上比上述任何解决方案都快。Ignacio的解决方案是执行速度最快的运行时,使用Python标准库是正确的答案。但你几乎不会以这种形式使用它。你会希望使用SystemRandom(如果不可用,则回退),确保表示所需的字符集,使用unicode(或不使用),确保连续调用产生唯一字符串,使用字符串模块字符类之一的子集等。这一切都需要比提供的答案中更多的代码。各种推广解决方案的尝试都有局限性,strgen使用简单的模板语言以更简洁和表达能力解决了这些问题。

在PyPI上:

pip install StringGenerator

披露:我是strgen模块的作者。

其他回答

基于另一个Stack Overflow答案,创建随机字符串和随机十六进制数的最轻量级方法,比公认答案更好的版本是:

('%06x' % random.randrange(16**6)).upper()

更快。

我会这样做:

import random
from string import digits, ascii_uppercase

legals = digits + ascii_uppercase

def rand_string(length, char_set=legals):

    output = ''
    for _ in range(length): output += random.choice(char_set)
    return output

或者只是:

def rand_string(length, char_set=legals):

    return ''.join( random.choice(char_set) for _ in range(length) )

使用此代码可以快速生成一个重复的随机文本值字符串:

import string
import random

def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
    return ''.join(random.choice(chars) for _ in range(size))

moja_lista = []
for a in range(20):
    moja_lista.append(id_generator(3, "3etrY"))

你会得到20个重复的随机文本值。生成器从集合“3etrY”集合生成三个组成元素。一切都可以根据您的喜好进行设置。

print(len(moja_lista))
moja_lista

如果需要随机字符串而不是伪随机字符串,则应使用os.urandom作为源

from os import urandom
from itertools import islice, imap, repeat
import string

def rand_string(length=5):
    chars = set(string.ascii_uppercase + string.digits)
    char_gen = (c for c in imap(urandom, repeat(1)) if c in chars)
    return ''.join(islice(char_gen, None, length))

如果您想要一个易于使用但高度可定制的密钥生成器,请使用密钥生成器pypi包。

这里是GitHub repo,您可以在其中找到完整的文档。

您可以自定义它,以提供您想要的字符串jist,并提供更多选项。下面是一个示例:

from key_generator.key_generator import generate

custom_key = generate(2, ['-', ':'], 3, 10, type_of_value = 'char', capital = 'mix', seed = 17).get_key()
print(custom_key)  # ZLFdHXIUe-ekwJCu

希望这有帮助:)

免责声明:这使用了我制作的密钥生成器库。