Генерация случайных текстовых строк по заданному шаблону
Мне нужно генерировать случайные текстовые строки определенного формата. Хотелось бы немного идей, чтобы я мог написать его на 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.choices
over 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