跳转到主要内容

在Python中生成随机字符串

项目描述

https://circleci.com/gh/leapfrogonline/rstr.svg?style=svg

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

它不依赖于标准库之外的任何库。

注意事项

默认情况下,rstr 使用 Python 的 random 模块来生成伪随机文本。该模块基于梅森旋转器, 是加密安全的。

如果您希望使用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'

您还可以通过添加两个参数来生成一个长度范围。在以下情况下,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() 相同的参数。

letters()

标准库中string.letters提供的字符。

uppercase()

标准库中string.uppercase提供的字符。

lowercase()

标准库中string.lowercase提供的字符。

printable()

标准库中string.printable提供的字符。

punctuation()

标准库中string.punctuation提供的字符。

nonwhitespace()

标准库中string.printable提供的字符,除了代表空白(制表符、空格等)的字符。

digits()

标准库中string.digits提供的字符。

nondigits()

标准库中string.letters和string.punctuation连接提供的字符。

nonletters()

标准库中string.digits和string.punctuation连接提供的字符。

normal()

在文本输入中通常接受的字符,相当于string.digits + string.letters + ‘ ‘(空格字符)。

unambiguous()

标准库中string.digits和string.letters连接提供的字符,除了类似字符:1、l和I等。

postalsafe()

在美国邮政地址中安全使用的字符:大小写字母、数字、空格以及句点、井号、连字符和正斜杠。

urlsafe()

在URL中安全(未保留)使用的字符:字母、数字、连字符、句点、下划线和波浪号。

domainsafe()

允许用于主机名,因此也允许用于互联网域的字符:字母、数字和连字符。

Xeger

受同名的Java库启发,xeger() 方法允许用户从正则表达式创建随机字符串。

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

>>> 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'

您还可以使用add_alphabet()方法向现有实例添加一个字符集。

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

示例

您可以将rstr与Python的内置字符串格式化相结合,以生成适合各种模板的字符串。

电子邮件地址

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

URL

'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),
           )

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

rstr-3.2.2.tar.gz (13.6 kB 查看哈希值)

上传时间

构建分发

rstr-3.2.2-py3-none-any.whl (10.0 kB 查看哈希值)

上传时间 Python 3

由以下机构支持