python随机字符串生成

一、功能:

从指定字符集中随机生成字符串。

字符集包含:

  1. 大写字母(upper): ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’
  2. 小写字母(lower):‘abcdefghijklmnopqrstuvwxyz’
  3. 数字(digit): ‘0123456789’
  4. 符号(punct):r’’’!@#$%^&*’’’

二、代码

#!/usr/bin/python
# -*- coding: utf-8 -*-
import random

class RandomString:
    chars = {
        'upper': 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
        'lower': 'abcdefghijklmnopqrstuvwxyz',
        'digit': '0123456789',
        'punct': r'''!@#$%^&*''',
    }

    def __init__(self, length, *contents):
        self.kinds = {}
        self.length = length
        if len(contents) == 0:
            self.kinds = None
        else:
            for content in contents[0]:
                kind = content.split(':')[0]
                if len(content.split(':')) == 1:
                    self.kinds[kind] = 0
                else:
                    self.kinds[kind] = int(content.split(':')[1])

    def create(self):
        res = ''
        charset = ''
        if self.kinds is None:
            charset = ''.join(c for c in RandomString.chars.values())
        else:
            if self.length < sum(num for num in rs.kinds.values()):
                print('规则不符,生成失败。')
            else:
                for kind, num in rs.kinds.items():
                    if num == 0:
                        pass
                    else:
                        for i in range(num):
                            res += random.choice(RandomString.chars[kind])
                    charset += RandomString.chars[kind]
        for i in range(self.length - len(res)):
            res += random.choice(charset)
        str_list = list(res)
        random.shuffle(str_list)
        return ''.join(str_list)


if __name__ == '__main__':
    rs = RandomString(10)
    rs.create()

三、用法:

1.实例化RandomString

rs = RandomString(length, *contents)

length:要生成的字符串总长度
contents:选择字符集以及某类字符最低数量(可选)
contents格式:[‘字符集1:最少个数’,‘字符集2:最少个数’,‘字符集3:最少个数’,‘字符集4:最少个数’]
最少个数可省略,默认为0。

2.生成字符串

rs.create()

四、实例

例1:生成16位随机字符串,默认选择所有字符集(大写字母、小写字母、数字、符号)

rs = RandomString(16)
rs.create()
'wuYsV@*GWF3Nvj^L'

例2:生成由大写字母、小写字母、数字组成的4位字符串。

rs = RandomString(4,['upper','lower','digit'])
rs.create()
'zmf4'

注意:如果不设置某字符集最少个数,最终生成的字符串中有概率不包含此类字符。

例3:生成由大写字母、小写字母、数字组成的4位字符串。其中各类字符都至少有1个。

rs = RandomString(4,['upper:1','lower:1','digit:1'])
rs.create()
'Lx2d'

例4:生成由大写字母、小写字母、数字、符号组成的10位字符串。其中至少包含4个大写字母,3个小写字母,1个数字。

rs = RandomString(10,['upper:4','lower:3','digit:1','punct'])
rs.create()
'3zM@oARWzS'

你可能感兴趣的:(PYTHON,python,字符串,random)