在python中生成随机字符串

rstr的Python项目详细描述


rstr是一个帮助模块,用于轻松生成各种类型的随机字符串。 它可以用于模糊测试、生成虚拟数据或其他 应用。

它在标准库之外没有依赖项,并且是兼容的 使用python 3。

一句小心话

默认情况下,rstr使用pythonrandom模块生成psuedorandom文本。该模块基于mersenne twister,在密码上是not安全的。

如果要使用rstr生成密码或其他加密 应用程序,必须创建使用SystemRandom的实例。

例如:

>> from rstr import Rstr
>> from random import SystemRandom
>> rs = Rstr(SystemRandom())

使用

rstr的基本方法是rstr()。至少,它需要一个参数, 从中创建字符串的字符表。

>>> import rstr
>>> rstr.rstr('ABC')
'AACAACCB'

默认情况下,它将返回一个长度介于1到10个字符之间的字符串。你 可以通过将其作为第二个参数来指定确切的长度:

>>> rstr.rstr('ABC', 4)
'ACBC'

还可以通过添加两个参数来生成一个长度范围。在下面 case,rstr将返回一个随机选择的长度在5到10之间的字符串 角色。

>>> rstr.rstr('ABC', 5, 10)
'CBCCCABAA'

也可以在字符串中包含特定的字符。这很有用 测试验证程序以确保拒绝某些字符时。 “include”参数中列出的字符将始终存在于某个位置 在结果字符串中。

>>> rstr.rstr('ABC', include='&')
'CA&A'

相反,可以从生成的字符串中排除特定字符。这是 从预定义的字符群开始时很有用。

>>> import string
>>> rstr.rstr(string.digits, exclude='5')
'8661442'

注意,任何接受字符串的参数也可以 接受字符串的列表或元组:

>>> rstr.rstr(['A', 'B', 'C'], include = ['@'], exclude=('C',))
'BAAABBA@BAA'

其他方法

rstr提供的其他方法,除了rstr()xeger()之外,都很方便。 方法,这些方法可以在不带参数的情况下调用,并提供预定义的字母表。 它们接受与rstr()相同的参数,用于 指定长度并包括或排除特定字符。

字母()
标准库中string.letters提供的字符。
大写()
标准库中string.uppercase提供的字符。
小写()
标准库中string.lowercase提供的字符。
可打印()
标准库中string.printable提供的字符。
标点符号()
标准库中string.penstion提供的字符。
非空格()
标准库中string.printable提供的字符,除了 对于表示空白的:制表符、空格等。
数字()
标准库中string.digits提供的字符。
非数字()
由string.letters和 标准库中的字符串标点符号。
非字母()
由string.digits和 标准库中的字符串标点符号。
正常值()
文本输入中通常接受的字符,相当于string.digits+ string.letters+''(空格字符)。
postalsafe()
美国邮政地址中安全使用的字符: 大写和小写字母、数字、空格和标点符号句点, 哈希()、连字符和正斜杠。
urlsafe()
URL中使用的安全字符(无保留):字母、数字、连字符、句点、下划线, 还有瓷砖。
域安全()
允许在主机名中使用的字符,因此,在Internet域中:字母, 数字和连字符。

谢格

受同名java库的启发,xeger()方法允许用户 从常规e创建随机字符串表达。

例如,要生成符合加拿大格式的邮政编码:

>>> import rstr
>>> rstr.xeger(r'[A-Z]\d[A-Z] \d[A-Z]\d')
u'R6M 1W5'

Xeger对大多数简单的正则表达式都很好,但它并不支持所有的正则表达式 python正则表达式特性。

自定义字母表

如果您有要与方法一起使用的自定义字符字母表 快捷方式,您可以在实例化rstr对象时通过关键字指定它们:

>>> from rstr import Rstr
>>> rs = Rstr(vowels='AEIOU')
>>> rs.vowels()
'AEEUU'

还可以用AddiaLababeTe()方法添加一个现有的字母表:

>>> rs.add_alphabet('odds', '13579')
>>> rs.odds()
'339599519'

示例

可以将rstr与python的内置字符串格式结合起来生成字符串 适合各种模板。

电子邮件地址:

'{0}@{1}.{2}'.format(rstr.nonwhitespace(exclude='@'),
                     rstr.domainsafe()
                     rstr.letters(3))

网址:

'http://{0}.{1}/{2}/?{3}'.format(rstr.domainsafe(),
                                rstr.letters(3),
                                rstr.urlsafe(),
                                rstr.urlsafe())

邮政地址:

"""{0} {1}
{2} {3}
{4}, {5} {6}
""".format(rstr.letters(4, 8).title(),
           rstr.letters(4, 8).title(),
           rstr.digits(3, 5),
           rstr.letters(4, 10).title(),
           rstr.letters(4, 15).title(),
           rstr.uppercase(2),
           rstr.digits(5),
           )

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java InputStream对象在声明后关闭   java未定义名为“transactionManager”的bean重命名transactionManager   java“jar”命令何时会拒绝将类添加到java中。jar文件?   java JPA标准依赖WHERE子句   安卓中从SD卡读取文本文件时出现java错误   java直接启用类似位置的权限   使用@WebMvcTest和Mockito-BDDMockito对SpringBoot-RestController进行java测试   java JSESSIONID存储在哪里?   java jtextarea鼠标事件覆盖容器鼠标事件   java DRL无法解析动态加载的类   java是从一个方法返回多个对象的最简单方法   java自定义按钮/编辑框是否不可见?   java GUI如何在保存用户输入的同时在面板或框架之间切换   swing Java自定义JSlider不会更新   GridBagLayout中的java超过1个JPanel   java从ProjectReactor中的flux中采样除第一个元素外的所有元素   Java泛型和泛型类型   Java代码生成宽指令的jvm