Ho cercato di trovare un modo più pitioso di generare una stringa casuale in python che possa scalare. In genere, vedo qualcosa di simile aStringhe casuali in Python 2.6 (Va bene?)
''.join(random.choice(string.letters) for i in xrange(len))
Fa schifo se si desidera generare una stringa lunga.
Ho pensato a random.getrandombits per un po 'e ho capito come convertirlo in un array di bit, quindi hex lo codifica. Utilizzando python 2.6 mi sono imbattuto nell'oggetto bitarray, che non è documentato. In qualche modo l'ho fatto funzionare, e sembra davvero veloce.
Genera una stringa casuale di 50 mi sul mio notebook in circa 3 secondi.
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]
modificare
heikogerlach ha sottolineato che si trattava di un numero dispari di caratteri che causano il problema. Nuovo codice aggiunto per assicurarsi che sia sempre inviato da un numero pari di cifre esadecimali.
Ancora curioso di sapere se c'è un modo migliore per farlo è altrettanto veloce.
Come faccio a fare questo in modo che possa includere solo i numeri, lettere, e sottolineare? (Questo include un trattino) – wenbert
@wenbert '' .join (random.choice (string.letters + string.digits + "_") per i in xrange (lunghezza)) – yanjost