Я пытаюсь найти более питонический способ генерации случайной строки в python, который также может масштабироваться. Как правило, я вижу нечто похожее на
''.join(random.choice(string.letters) for i in xrange(len))
Это отстой, если вы хотите создать длинную строку.
Я некоторое время думал о random.getrandombits и выяснял, как преобразовать его в массив бит, а затем кодировать шестнадцатеричный код. Используя python 2.6, я столкнулся с объектом bitarray, который не документирован. Как-то я получил его на работу, и это кажется очень быстрым.
Он генерирует случайную строку длиной 50 мил на моем ноутбуке всего за 3 секунды.
def rand1(leng):
nbits = leng * 6 + 1
bits = random.getrandbits(nbits)
uc = u"%0x" % bits
newlen = int(len(uc) / 2) * 2 # we have to make the string an even length
ba = bytearray.fromhex(uc[:newlen])
return base64.urlsafe_b64encode(str(ba))[:leng]
изменить
heikogerlach указал, что это было нечетное число символов, вызывающих проблему. Добавлен новый код, чтобы он всегда отправлял fromhex четное число шестнадцатеричных цифр.
По-прежнему любопытно, есть ли лучший способ сделать это так же быстро.