如何使用随机模块生成不区分大小写的字符串

时间:2016-05-20 07:19:13

标签: python random

我需要生成随机的32位数字和15个字符的字符串,以获得09826843-5112-8345-7619-372151470268qcRtAhieRabnpUaQ之类的内容。我使用以下代码生成数字:

import random

"-".join(['%08d' % random.randrange(0, 10e7), 
          '%04d' % random.randrange(0, 10e3), 
          '%04d' % random.randrange(0, 10e3), 
          '%04d' % random.randrange(0, 10e3), 
          '%012d' % random.randrange(0, 10e11)]) 

是否有类似的方法只用random模块创建不区分大小写的15-char字符串?

3 个答案:

答案 0 :(得分:3)

import random
import string
''.join(random.sample(string.ascii_letters, 15))

import uuid
str(uuid.uuid4())

答案 1 :(得分:3)

import numpy as np
import random
import string


def random_string(num_chars, symbols):    
    return "".join(random.choice(symbols)
                   for _ in range(num_chars))


def random_string2(num_chars, symbols, replace=True):
    """Random string with replacement option"""
    symbols = np.asarray(list(symbols))
    return "".join(np.random.choice(symbols, num_chars, replace))

def main():
    print(random_string(15, string.ascii_letters))
    print(random_string2(15, string.ascii_letters, False))
    print(random_string2(15, string.ascii_letters, True))


if __name__ == "__main__":
    main()

请注意,字符串中的元素不必是唯一的(我认为这是因为“qcRtAhieRabnpUaQ”有2'a')。

如果您希望元素是唯一的,那么@Sergey Gornostaev的解决方案可能是最优雅的,但是这会将ascii_letters中的唯一元素数量强加为您可以生成的最长字符串。

答案 2 :(得分:1)

import random

rand_cap = [chr(random.randint(65, 90)) for i in range(7)]
rand_small = [chr(random.randint(97, 122)) for i in range(7)]
rand_chars_list = rand_cap + rand_small

random.shuffle(rand_chars_list)

rand_chars = ''.join(rand_chars_list)