2023年 3月 19日

Python生成随机数字/字符

文章目录

  • random库
    • 生成一个指定长度的随机字符串
  • Faker库
    • 生成不重复的数据

random库

random是python自带库,使用前导入 import random 即可,无需安装。

函数 说明
random.random() 生成一个[0, 1)的随机浮点数
random.uniform(a, b) 生成一个[a, b)的随机浮点数
random.randint(a, b) 生成一个[a, b]的随机整数
random.choice(series) 从series序列中返回一个任意的元素,series可为字符串、列表、元组
random.sample(series, num) 从series序列中返回任意num个元素组成的一个列表
random.shuffle(series) 将列表中的所有元素打乱
random.randrange(a, b, step) 返回[a, b)按指定递增基数step集合中的一个随机数

举例:

import random

print(random.random())	# 0.8564557389763434
print(random.uniform(0, 100))	# 78.19630268831175
print(random.randint(0, 100))	# 45

print(random.choice('12345'))	# 4
print(random.choice([1,2,3,4,5]))	# 1
print(random.choice((1,2,3,4,5)))	# 5

print(random.sample('12345', 3))	# ['1', '5', '2']
print(random.sample([1,2,3,4,5], 3))	# [5, 4, 1]
print(random.sample((1,2,3,4,5), 3))	# [4, 5, 1]

list = [1, 2, 3, 4, 5]
random.shuffle(list)
print(list)	# [3, 5, 4, 1, 2]

print(random.randrange(0,20,5))	# 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

生成一个指定长度的随机字符串

  1. 使用random.randint(0,n)
    思路:定义一个基础字符序列,要产生多长的字符串就循环调用多少次random.randint(0,n),n=基础字符序列的长度,在这个序列中选择随机位置的字符,然后进行拼接返回。

    import random
    import string
    
    def generate_random_str(randomlength=16):
      """
      生成一个指定长度的随机字符串
      """
      random_str =''
        # 使用string库中的字母、数字和标点符号组成一个基础字符序列
      base_str = string.ascii_letters + string.digits + string.punctuation
      length =len(base_str) -1
      for i in range(randomlength):
        random_str +=base_str[random.randint(0, length)]
      return random_str
    
    print(generate_random_str(30))	# T`^7:C?z4h0qd!JpO:MFNB2_GL>dXm
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  2. 使用random.choice()随机选择

    import random
    import string
    
    def generate_random_str(randomlength=16):
        """
          生成一个指定长度的随机字符串
        """
        # 使用string库中的字母、数字和标点符号拼接程序列
        str_list = [random.choice(string.ascii_letters + string.digits + string.punctuation) for i in range(randomlength)]
        random_str = ''.join(str_list)
        return random_str
    
    print(generate_random_str(30))	# ')8D@Bu&\1ltf!}HUcI-.;^>Vy[n|V
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  3. 使用random.simple()随机选择

    import random
    import string
    
    def generate_random_str(randomlength=16):
        """
        生成一个指定长度的随机字符串
        """
        # 使用string库中的字母、数字和标点符号组成一个基础字符序列
        base_str = string.ascii_letters + string.digits + string.punctuation
        str_lst = random.sample(base_str, randomlength)	#randomlength<=lenth(base_str)
        random_str = ''.join(str_lst)
        return random_str
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

Faker库

使用Faker库可生成各种各样的伪数据(姓名、地址、邮箱、电话、密码、一段文字、一句话等)。
安装:pip install faker
导入:from faker import Faker
示例:

from faker import Faker
fk = Faker(locale='zh-Cn')

# 姓名
print(fk.name())	# 刘娜
# 身份证
print(fk.ssn())		# 141022195412020845
# 手机号
print(fk.phone_number())	# 18226186826
# 邮箱
print(fk.email())	# zoujie@example.org
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 个人信息类

    函数 说明
    fk= Faker(‘zh_CN’) 默认生成的数据为为英文,使用zh_CN指定为中文
    fk.name() 姓名
    fk.ssn() 身份证
    fk.phone_number() 手机号
    fk.email() 邮箱
    fk.credit_card_number() 银行卡号
    fk.address() 带邮政编码的地址
    fk.company() 公司名称
    fk.job() 职称
    fk.email() 邮箱
    fk.profile() 档案信息
    fk.simple_profile() 简单的档案信息
  • 数字类

    函数 说明
    fk.numerify() 三位随机数字
    fk.random_digit() 一位[0, 9]的随机数
    fk.random_int() 一位[0, 9999]的随机数, 可设置[min, max]
    fk.random_number() 随机长度数字
  • 文本、加密类

    函数 说明
    fk.random_element()
    fk.random_letter()
    随机一位字母
    fk.pystr() 随机长度字符串
    fk.word() 随机一个词语
    fk.sentence() 随机一个句子
    fk.paragraph() 随机一个段落
    fk.text() 随机一篇文章
    fk.url() 随机url
    fk.md5() 随机生成md5
    fk.password() 随机生成密码
  • 日期类

    函数 说明
    fk.year()
    fk.month()
    fk.date() 日期:年月日
    fk.past_date() 过去时间:年月日
    fk.date_this_year() 当前年份:年月日
    fk.future_date() 未来时间:年月日
    fk.date_between(start_date=‘-3y’, end_date=‘+1y’) 自定义日期范围,3年前到1前后之间的
    fk.date_time() 年月日 时分秒
    fk.future_datetime() 未来时间:年月日 时分秒
    fk.date_time_between(start_date=‘-3y’, end_date=‘+1y’) 自定义时间范围,3年前到1前后之间的
    fk.time() 随机24小时时间
  • 地理信息类

    函数 说明
    fk.country() 国家
    fk.country_code() 国家编码
    fk.province() 省份
    fk.city() 城市
    fk.district()
    fk.postcode() 邮编

生成不重复的数据

from faker import Faker
fk = Faker(locale='zh-Cn')

# 从[0,9]中随机获取7位数字(可重复)
print([fk.random_digit() for i in range(7)])	# [2, 0, 7, 8, 2, 3, 2]
# 从[0,9]中随机获取7位数字(不可重复)
print([fk.unique.random_digit() for i in range(7)])		# [4, 9, 3, 6, 8, 5, 2]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6