Генерация случайных текстовых строк по заданному шаблону - PullRequest
17 голосов
/ 15 декабря 2008

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

Ответы [ 4 ]

50 голосов
/ 15 декабря 2008
#!/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:], а не наоборот.

16 голосов
/ 15 декабря 2008

См. Пример - Рецепт 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'
>>> 
5 голосов
/ 07 января 2013

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))
1 голос
/ 03 мая 2015

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

import random
import string

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