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

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

4 ответа

Решение
#!/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:], а не наоборот.

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

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

Более короткая версия, начиная с python 3.6.2, сrandom.choicesover random.choice, который не требует цикла for, а просто передает k, необходимую длину случайной строки.

import random
import string
x = ''.join(random.choices(string.ascii_letters + string.digits, k=16))
print(x)

Вы также можете добавить string.punctuation если вам нужна строка с символами пунктуации.

Вот более простая версия:

import random
import string

digits = "".join( [random.choice(string.digits+string.letters) for i in   xrange(10)] )
print digits
Другие вопросы по тегам