Ich muss zufällige Textzeichenfolgen eines bestimmten Formats generieren. Möchte einige Ideen, damit ich es in Python kodieren kann. Das Format ist < 8-stellige Nummer> < 15-stellige Zeichenfolge>.Generieren von zufälligen Textzeichenfolgen eines bestimmten Musters
Antwort
#!/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: mochte die Idee von random.choice besser als randint() verwendet, so ich habe den Code aktualisiert das widerspiegeln.
Hinweis: Dies setzt Klein- und Großbuchstaben voraus. Wenn nur dann Kleinbuchstaben die zweite Liste Verständnis lesen ändern:
chars = "".join([random.choice(string.letters[:26]) for i in xrange(15)])
Offensichtlich für Groß nur können Sie nur, dass um Flip so die Scheibe ist [26:] statt umgekehrt.
Siehe ein Beispiel - Recipe 59873: Random Password Generation.
Aufbauend auf dem Rezept, hier ist eine Lösung auf Ihre Frage:
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'
>>>
random.sample
ist eine alternative Wahl. Der Unterschied, wie in der python.org documentation gefunden werden kann, ist, dass random.sample
Proben ohne Ersatz. Somit würde random.sample(string.letters, 53)
zu einem ValueError
führen. Dann, wenn Sie generieren Ihre zufällige Zeichenfolge aus acht Ziffern und fünfzehn Zeichen wollten, würden Sie schreiben
import random, string
digits = ''.join(random.sample(string.digits, 8))
chars = ''.join(random.sample(string.letters, 15))
Hier ist eine einfachere Version:
import random
import string
digits = "".join([random.choice(string.digits+string.letters) for i in xrange(10)])
print digits
Nizza Antwort! (Ich hatte noch nie zuvor random.choice vorher gesehen.) –
Behalten Sie die Rezepte als Lesezeichen - http://code.activestate.com/recipes/ – gimel
Wahrscheinlich besser lesbar, um string.lowercase und string.uppercase zu verwenden als die Liste zu schneiden. Auch die Lösung gilt nur, wenn das OP nur mit ASCII-Zeichen zufrieden ist, wenn er Strings aus dem ganzen Unicode-Zeichensatz erzeugen will, wird das Problem viel schwieriger. –