某些场景下,生成随机字符串是刚需。纯手动写一个未尝不可,不过python内置的string模块能让我们更加方便地实现这个需求。
string提供的变量
# Some strings for ctype-style character classification
whitespace = ' \t\n\r\v\f'
ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
ascii_letters = ascii_lowercase + ascii_uppercase
digits = '0123456789'
hexdigits = digits + 'abcdef' + 'ABCDEF'
octdigits = '01234567'
punctuation = r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"""
printable = digits + ascii_letters + punctuation + whitespace
# Functions which aren't available as string methods.
string模块下已经声明好了各种类型的字符串变量,配合random函数可以实现需求了。
生成固定长度的随机字符串
import string
import random
# 生成4长度的随机字符串 - 大写字母 运行结果 GHdg
random_str = ''.join(random.choice(string.ascii_letters) for _ in range(4))
print(random_str)
# 生成10长度的随机字符串 - 大写字母和数字混合 运行结果:vbQxRkYG0B
random_str_num = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(10))
print(random_str_num)
瞧,非常方便,如果将其封装成一个函数,以后随时可以拿来用,那就更为方便了。在上面的演示中,for _ in range(int)控制着join执行的次数。
生成一个由随机字符串组成的列表
我们将需求更进一步,生成一个指定长度的随机字符串列表,例如这样:
['QpSJh', 'mhwZA', 'kuWti', 'eJIFT', 'ETlBa']
这里,就必须要封装一个生成指定长度的随机字符串方法了,先简单封装一个吧。
def random_str(num=1):
random_str = ''.join(random.choice(string.ascii_letters) for _ in range(num))
return random_str
name_list = [random_str(10) for _ in range(50)]
print(name_list)
非常方便地,就能将一个长度为50的随机字符列表生成出来了。