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