注:本人使用的是windows7,以下所有是在window7环境下完成的
Faker是一个Python第三方库,可以用来生成你需要用到的假数据。无论您需要引导数据库、创建好看的XML文档、填充持久化以进行压力测试,还是对从生产服务中获取的数据进行匿名化,Faker都适合您。
使用pip安装Faker库。
pip install Faker
使用faker. faker()来创建和初始化一个faker生成器,它可以通过访问以所需数据类型命名的属性来生成数据。
from faker import Faker
fake = Faker()
fake.name()
# 'Lucy Cechtelar'
fake.address()
# '426 Jordy Lodge
# Cartwrightshire, SC 88120-6700'
fake.text()
# 'Sint velit eveniet. Rerum atque repellat voluptatem quia rerum. Numquam excepturi
# beatae sint laudantium consequatur. Magni occaecati itaque sint et sit tempore. Nesciunt
# amet quidem. Iusto deleniti cum autem ad quia aperiam.
# A consectetur quos aliquam. In iste aliquid et aut similique suscipit. Consequatur qui
# quaerat iste minus hic expedita. Consequuntur error magni et laboriosam. Aut aspernatur
# voluptatem sit aliquam. Dolores voluptatum est.
# Aut molestias et maxime. Fugit autem facilis quos vero. Eius quibusdam possimus est.
# Ea quaerat et quisquam. Deleniti sunt quam. Adipisci consequatur id in occaecati.
# Et sint et. Ut ducimus quod nemo ab voluptatum.'
每次调用方法fake.name()
都会产生不同的(随机)结果。这是因为 fakerfaker.Generator.method_name()
将调用转发给faker.Generator.format(method_name)
.
for _ in range(10):
print(fake.name())
# 'Adaline Reichel'
# 'Dr. Santa Prosacco DVM'
# 'Noemy Vandervort V'
# 'Lexi O'Conner'
# 'Gracie Weber'
# 'Roscoe Johns'
# 'Emmett Lebsack'
# 'Keegan Thiel'
# 'Wellington Koelpin II'
# 'Ms. Karley Kiehn V'
Pytest 固定装置
Faker
也有它自己的pytest
插件,它提供了一个faker
可以在测试中使用的夹具。请查看pytest fixture 文档以了解更多信息。
供应商
每个生成器属性(如name
、address
和 lorem
)都称为“假的”。一个 faker 生成器有很多,打包在“providers”中。
from faker import Faker
from faker.providers import internet
fake = Faker()
fake.add_provider(internet)
print(fake.ipv4_private())
本土化
faker.Faker
可以将语言环境作为参数,以返回本地化数据。如果未找到本地化提供程序,工厂将回退到美国英语的默认 LCID 字符串,即:en_US
。中文是:zn_ch
from faker import Faker
fake = Faker('it_IT')
for _ in range(10):
print(fake.name())
# 'Elda Palumbo'
# 'Pacifico Giordano'
# 'Sig. Avide Guerra'
# 'Yago Amato'
# 'Eustachio Messina'
# 'Dott. Violante Lombardo'
# 'Sig. Alighieri Monti'
# 'Costanzo Costa'
# 'Nazzareno Barbieri'
# 'Max Coppola'
faker.Faker
还支持多个语言环境。v3.0.0 中的新功能。
from faker import Faker
fake = Faker(['it_IT', 'en_US', 'ja_JP'])
for _ in range(10):
print(fake.name())
# 鈴木 陽一
# Leslie Moreno
# Emma Williams
# 渡辺 裕美子
# Marcantonio Galuppi
# Martha Davis
# Kristen Turner
# 中津川 春香
# Ashley Castillo
# 山田 桃子
您可以在 providers 包下的源代码中检查可用的 Faker 语言环境。Faker 的本地化是一个持续的过程,为此我们需要您的帮助。请毫不犹豫地为您自己的语言环境创建本地化提供程序并提交合并请求 (PR)。
优化
Faker 的构造函数接受一个与性能相关的参数,称为 use_weighting
. 它指定是否尝试使值的频率与真实世界的频率匹配(例如,英文名称 Gary 比名称 Lorimer 更频繁)。如果use_weighting
是False
,则所有项目被选中的机会均等,并且选择过程要快得多。默认值为True
。
命令行用法
安装后,您可以从命令行调用 faker:
faker [-h] [--version] [-o output]
[-l {bg_BG,cs_CZ,...,zh_CN,zh_TW}]
[-r REPEAT] [-s SEP]
[-i {package.containing.custom_provider otherpkg.containing.custom_provider}]
[fake] [fake argument [fake argument ...]]
在哪里:
faker
: 是安装在您的环境中时的脚本,在开发中您可以改用python -m faker
-h
,--help
: 显示帮助信息--version
: 显示程序的版本号-o
FILENAME
: 将输出重定向到指定的文件名-l
{bg_BG,cs_CZ,...,zh_CN,zh_TW}
: 允许使用本地化提供者-r
REPEAT
: 将生成指定数量的输出-s
SEP
: 将在每次生成输出后生成指定的分隔符-i
{my.custom_provider other.custom_provider}
要使用的其他自定义提供程序列表。请注意,这是包含您的 Provider 类的包的导入路径,而不是自定义 Provider 类本身。fake
: 是要为其生成输出的伪造名称,例如name
,address
, 或text
[fake argument ...]
:传递给假的可选参数(例如,配置文件假采用逗号分隔的字段名称的可选列表作为第一个参数)
例子:
$ faker address
968 Bahringer Garden Apt. 722
Kristinaland, NJ 09890
$ faker -l de_DE address
Samira-Niemeier-Allee 56
94812 Biedenkopf
$ faker profile ssn,birthdate
{'ssn': '628-10-1085', 'birthdate': '2008-03-29'}
$ faker -r=3 -s=";" name
Willam Kertzmann;
Josiah Maggio;
Gayla Schmitt;
如何创建提供者
from faker import Faker
fake = Faker()
# first, import a similar Provider or use the default one
from faker.providers import BaseProvider
# create new provider class
class MyProvider(BaseProvider):
def foo(self) -> str:
return 'bar'
# then add new provider to faker instance
fake.add_provider(MyProvider)
# now you can use:
fake.foo()
# 'bar'
如何创建动态提供者
动态提供者可以从外部源读取元素。
from faker import Faker
from faker.providers import DynamicProvider
medical_professions_provider = DynamicProvider(
provider_name="medical_profession",
elements=["dr.", "doctor", "nurse", "surgeon", "clerk"],
)
fake = Faker()
# then add new provider to faker instance
fake.add_provider(medical_professions_provider)
# now you can use:
fake.medical_profession()
# 'dr.'
如何自定义 Lorem Provider
如果您不想使用默认的 lorem ipsum,您可以提供自己的词组。以下示例显示了如何使用从cakeipsum中选取的单词列表来执行此操作:
from faker import Faker
fake = Faker()
my_word_list = [
'danish','cheesecake','sugar',
'Lollipop','wafer','Gummies',
'sesame','Jelly','beans',
'pie','bar','Ice','oat' ]
fake.sentence()
# 'Expedita at beatae voluptatibus nulla omnis.'
fake.sentence(ext_word_list=my_word_list)
# 'Oat beans oat Lollipop bar cheesecake.'