He estado tratando de encontrar una forma más pitónica de generar cadenas aleatorias en python que también puedan escalar. Por lo general, veo algo similar aCadenas aleatorias en Python 2.6 (¿Está bien?)
''.join(random.choice(string.letters) for i in xrange(len))
Es un asco si desea generar cadena larga.
He estado pensando en random.getrandombits por un tiempo, y descubriendo cómo convertir eso en una matriz de bits, y luego codificarlo en hexadecimal. Usando Python 2.6 me encontré con el objeto bitarray, que no está documentado. De alguna manera lo hice funcionar, y parece realmente rápido.
Genera una secuencia aleatoria de 50 mil en mi computadora portátil en solo 3 segundos.
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]
edición
heikogerlach señaló que se trataba de un número impar de caracteres que causan el problema. Se agregó un nuevo código para asegurarse de que siempre envía desde hex un número par de dígitos hexadecimales.
Siendo curioso, si hay una forma mejor de hacerlo, es igual de rápido.
¿Cómo hago esto para que sólo incluirá los números, letras, y ¿guion bajo? (Esto incluye un guion) – wenbert
@wenbert '' .join (random.choice (string.letters + string.digits + "_") para i en xrange (longitud)) – yanjost