Jak utworzyć losowy ciąg w Pythonie?
Potrzebowałem liczby, a następnie powtarzanie postaci, aż skończysz, to jest to, co stworzyłem
def random_id(length):
number = '0123456789'
alpha = 'abcdefghijklmnopqrstuvwxyz'
id = ''
for i in range(0,length,2):
id += random.choice(number)
id += random.choice(alpha)
return id
Odpowiedzi:
Generowanie ciągów z (na przykład) małych liter:
import random, string def randomword(length): letters = string.ascii_lowercase return ''.join(random.choice(letters) for i in range(length))
Wyniki:
>>> randomword(10) 'vxnxikmhdc' >>> randomword(10) 'ytqhdohksy'
źródło
randomword(length, source_alpha=string.lowercase)
ixrange(length)
.string.ascii_lowercase
os.urandom(length)
Odpowiada na oryginalne pytanie, a @sth niepoprawnie czytał w myślach OP.random.choices
byłoby szybsze.Ponieważ to pytanie jest dość, hm, przypadkowe, to może Ci pomóc:
>>> import uuid >>> print uuid.uuid4() 58fe9784-f60a-42bc-aa94-eb8f1a7e5c17
źródło
str(uuid.uuid4())
jeśli chcesz użyć go jako ciągu.str(uuid.uuid4()).split("-")[0]
Wyjście:'4bcb6450'
>>> import random >>> import string >>> s=string.lowercase+string.digits >>> ''.join(random.sample(s,10)) 'jw72qidagk
źródło
random.choice
nie jest bezpieczny. Użyjrandom.SystemRandom().choice()
lub użyjos.urandom()
bezpośrednio .lowercase
należy go zastąpićascii_lowercase
Odpowiedź na pierwotne pytanie:
Cytat z: http://docs.python.org/2/library/os.html
źródło
Możesz budować losowe postacie ascii, takie jak:
import random print chr(random.randint(0,255))
A następnie zbuduj dłuższy ciąg, taki jak:
len = 50 print ''.join( [chr(random.randint(0,255)) for i in xrange(0,len)] )
źródło
''.join(map(chr, random.randint(0,256) for _ in xrange(len)))
Tak naprawdę nie powiedziałeś zbyt wiele o tym, jakiego rodzaju losowego ciągu potrzebujesz. Ale w każdym razie powinieneś zajrzeć do
random
modułu.Poniżej wklejono bardzo proste rozwiązanie.
import random def randstring(length=10): valid_letters='ABCDEFGHIJKLMNOPQRSTUVWXYZ' return ''.join((random.choice(valid_letters) for i in xrange(length))) print randstring() print randstring(20)
źródło
Czasami chciałem przypadkowych ciągów, które są na wpół wymawiane i zapadają w pamięć.
import random def randomWord(length=5): consonants = "bcdfghjklmnpqrstvwxyz" vowels = "aeiou" return "".join(random.choice((consonants, vowels)[i%2]) for i in range(length))
Następnie,
>>> randomWord() nibit >>> randomWord() piber >>> randomWord(10) rubirikiro
Aby uniknąć 4-literowych słów, nie ustawiaj
length
4.Jim
źródło
random_name = lambda length: ''.join(random.sample(string.letters, length))
długość musi wynosić <= len (string.letters) = 53. przykład wyniku
>>> [random_name(x) for x in range(1,20)] ['V', 'Rq', 'YtL', 'AmUF', 'loFdS', 'eNpRFy', 'iWFGtDz', 'ZTNgCvLA', 'fjUDXJvMP', 'EBrPcYKUvZ', 'GmxPKCnbfih', 'nSiNmCRktdWZ', 'VWKSsGwlBeXUr', 'i stIFGTUlZqnav', 'bqfwgBhyTJMUEzF', 'VLXlPiQnhptZyoHq', 'BXWATvwLCUcVesFfk', 'jLngHmTBtoOSsQlezV', 'JOUhklIwDBMFzrTCPub'] >>>
Cieszyć się. ;)
źródło
Zainstaluj ten pakiet:
I użyj tego kodu:
from py_essentials import simpleRandom as sr print(sr.randomString(4))
Więcej informacji o metodzie pozostałe parametry dostępne tutaj.
źródło
W
python3.6+
możesz skorzystać zsecrets
modułu :Testując generację
768bit
tokenów bezpieczeństwa znalazłem:random.choices()
-0.000246
seksecrets.choice()
-0.003529
sekTe
secrets
moduły są wolniejsze, ale poza testowanie go to, co powinno być w użyciu dla celów kryptograficznych:import string, secrets def random_string(size): letters = string.ascii_lowercase+string.ascii_uppercase+string.digits return ''.join(secrets.choice(letters) for i in range(size)) print(random_string(768))
źródło
Ta funkcja generuje losowy ciąg składający się z wielkich i małych liter, cyfr, przekazuje separator długości, no_of_blocks, aby określić format ciągu
np .: len_sep = 4, no_of_blocks = 4 wygeneruje następujący wzorzec,
Gdzie separator długości doda „-” po 4 znakach
liczba bloków wygeneruje następujący wzór znaków jako ciąg
jeśli potrzebny jest jeden losowy ciąg, po prostu zachowaj zmienną no_of_blocks równą 1 i len_sep, aby określić długość losowego ciągu.
np: len_sep = 10, no_of_blocks = 1, wygeneruje następujący wzorzec tj. losowy ciąg o długości 10 ,
import random as r def generate_random_string(len_sep, no_of_blocks): random_string = '' random_str_seq = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" for i in range(0,len_sep*no_of_blocks): if i % len_sep == 0 and i != 0: random_string += '-' random_string += str(random_str_seq[r.randint(0, len(random_str_seq) - 1)]) return random_string
źródło
import random import string def get_random_string(size): chars = string.ascii_lowercase+string.ascii_uppercase+string.digits ''.join(random.choice(chars) for _ in range(size)) print(get_random_string(20)
wyjście: FfxjmkyyLG5HvLeRudDS
źródło
spróbuj zaimportować poniższy pakiet z losowego importu *
źródło