Генерация случайных текстовых строк заданного шаблона

Мне нужно генерировать случайные текстовые строки определенного формата. Понравились бы некоторые идеи, чтобы я мог его закодировать в Python. Формат составляет < 8-значное число > < 15 символов строки > .

Ответ 1

#!/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

EDIT: понравилась идея использования random.choice лучше, чем randint(), поэтому я обновил код, чтобы это отразить.

Примечание: это предполагает, что требуются символы в нижнем и верхнем регистре. Если в нижнем регистре только затем измените понимание второго списка, прочитайте:

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

Очевидно, что для прописных букв вы можете просто перевернуть это так, чтобы срез был [26:], а не наоборот.

Ответ 2

См. пример - Рецепт 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'
>>> 

Ответ 3

random.sample - альтернативный вариант. Различие, которое можно найти в документации python.org, заключается в том, что random.sample выборки без замены. Таким образом, random.sample(string.letters, 53) приведет к a ValueError. Затем, если вы хотите создать свою случайную строку из восьми цифр и пятнадцати символов, вы должны написать

import random, string

digits = ''.join(random.sample(string.digits, 8))
chars = ''.join(random.sample(string.letters, 15))

Ответ 4

Здесь более простая версия:

import random
import string

digits = "".join( [random.choice(string.digits+string.letters) for i in   xrange(10)] )
print digits