菜鸟笔记
提升您的技术认知

python生成随机字符串

随机字符的场景大致有以下场景:

1.产生随机字符串 无数字

2.产生随机长度的字符串 无数字、有数字

3.产生随机手机号

4.产生随机n位的数字

5.产生随机n以内的数字

随机使用的两种思路如下:

一:使用random.randint(0,n)

定义一个字符数据源的数组,要产生多长的字符串就循环调用多少次random.randint(0,n),n=数据源数组的长度,在这个数据源数组中选择随机位置的字符,然后进行拼接返回

def generate_random_str(randomlength=16):
  """
  生成一个指定长度的随机字符串
  """
  random_str =''
  base_str ='ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789'
  length =len(base_str) -1
  for i in range(randomlength):
    random_str +=base_str[random.randint(0, length)]
  return random_str
if __name__ == '__main__':
  print(generate_random_str(30))

二:使用random.choice随机选择,需要多少长度就随机多少次

这里补充以下choice的用法:

random.choice() 在参数中随机产生返回一个对象 参数可以使list,也可以是string、元祖

import random

random.choice([1, 2, 3, 5, 9]) #返回5

random.choice('A String') #返回n

def getRandom(randomlength=16):
  """
  生成一个指定长度的随机字符串
  """
  digits=0123456789
  ascii_letters=abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
  str_list =[random.choice(digits +ascii_letters) for i in range(randomlength)]
  random_str =''.join(str_list)
  return random_str

最后,使用了dict字典实现按照mode按使用场景生成不同的字符串

def getRandomString(mode="mixDigitLetter", len=15):
    #按照不同模式生成随机字符串
    upperLetter = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    lowerLetter = "abcdefghigklmnopqrstuvwxyz"
    digits="0123456789"
    wpecialCharacters = "!@#$%&_-.+="
    randomMap ={"digit":digits,"upper":upperLetter,"lower":lowerLetter,"mixDigitLetter":upperLetter+lowerLetter+digits,"mixLetter":upperLetter+lowerLetter,"mixDigitLetterCharcter":upperLetter+lowerLetter+digits+wpecialCharacters}
    return getRandom(randomMap[mode],len)

对于第5中产生随机n以内的数字,直接使用random.randomint(0,n)即可

如,产生100以内的整数

print(random.randint(0,100))

三、使用Faker库产生随机数据

有时我们测试用例中会用到一些测试数据,比如人员信息(姓名、地址、邮箱、电话),可能姓名、地址这种不太好随机,生产数据又需要做脱敏处理

Faker提供的强大的随机能力,支持生成多种语言的随机信息(姓名、地址、邮箱、电话、密码、一段文字、一句话等待),非常好用

from faker import Faker

faker = Faker(locale='zh_CN')
for i in range(10):
    print(faker.name()+','+faker.address()+','+faker.email()+','+faker.phone_number())
print(faker.password())

结果

faker使用参考:

https://www.coonote.com/python-note/python-faker.html