如何在 Python 中生成随机字符串?

如何在 Python 中创建随机字符串?

我需要它的数字然后字符,重复,直到迭代完成。

这就是我创造的:

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
166718 次浏览

你可以创建随机的 ascii 字符,比如:

import random
print chr(random.randint(0,255))

然后构建一个更长的字符串,比如:

len = 50
print ''.join( [chr(random.randint(0,255)) for i in xrange(0,len)] )

用(例如)小写字符生成字符串:

import random, string


def randomword(length):
letters = string.ascii_lowercase
return ''.join(random.choice(letters) for i in range(length))

结果:

>>> randomword(10)
'vxnxikmhdc'
>>> randomword(10)
'ytqhdohksy'

You haven't really said much about what sort of random string you need. But in any case, you should look into the random module.

下面粘贴了一个非常简单的解决方案。

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)

因为这个问题是相当,呃,随机的,这个可能对你有用:

>>> import uuid
>>> print uuid.uuid4()
58fe9784-f60a-42bc-aa94-eb8f1a7e5c17
>>> import random
>>> import string
>>> s=string.lowercase+string.digits
>>> ''.join(random.sample(s,10))
'jw72qidagk

回答最初的问题:

os.urandom(n)

引自: http://docs.python.org/2/library/os.html

Return a string of n random bytes suitable for cryptographic use.

此函数从特定于操作系统的随机性中返回随机字节 返回的数据应该足够不可预测,以便 加密应用程序,虽然它的确切质量取决于操作系统 在类 UNIX 系统上,这将查询/dev/urandom, and on Windows it will use CryptGenRandom. If a randomness source is not found, NotImplementedError will be raised.

用于提供的随机数生成器的易于使用的接口 在你的平台上,请看到随机。系统随机。

random_name = lambda length: ''.join(random.sample(string.letters, length))

长度必须 < = len (string.Letters) = 53。 结果例子

   >>> [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']
>>>

请慢用

安装这个包:

pip3 install py_essentials

用这个代码:

from py_essentials import simpleRandom as sr
print(sr.randomString(4))

有关该方法的更多信息,请点击这里查看其他参数。

此函数生成由大写、小写字母、数字组成的随机字符串,通过长度分隔符 no _ of _ block 来指定字符串格式

Len _ sep = 4,no _ of _ block = 4将生成以下模式,

F4nQ-Vh5z-JKEC-WhuS

其中,长度分隔符将添加4个字符后的“-”

XXXX-

No of 块将以字符串形式生成以下字符模式

XXXX-XXXX-XXXX-XXXX

如果需要一个随机字符串,只需将 no _ of _ block 变量保持为等于1,并使用 len _ sep 指定随机字符串的长度。

Len _ sep = 10,no _ of _ block = 1,将生成以下模式,即 长度10的随机字符串,

F01xgCdoDU

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

有时候,我希望随机的字符串是半发音,半难忘。

import random


def randomWord(length=5):
consonants = "bcdfghjklmnpqrstvwxyz"
vowels = "aeiou"


return "".join(random.choice((consonants, vowels)[i%2]) for i in range(length))

然后,

>>> randomWord()
nibit
>>> randomWord()
piber
>>> randomWord(10)
rubirikiro

为了避免4个字母的单词,不要将 length设置为4。

吉姆

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)

输出: FfxjmkyLG5HvLeRudDS

python3.6+中,你可以使用 secrets模块:

The secrets module is used for generating cryptographically strong random numbers suitable for managing data such as passwords, account authentication, security tokens, and related secrets.

In particularly, secrets should be used in preference to the default 设计了随机模块中的伪随机数发生器 用于建模和模拟,而不是安全或加密。

在测试 768bit安全令牌的生成过程中,我发现:

  • random.choices()-0.000246
  • secrets.choice()-0.003529

secrets模块运行速度较慢,但除了测试之外,您还应该将它用于加密目的:

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))