欢迎来到Faker的文档!¶
Faker是为您生成假数据的Python包。是否 您需要引导数据库,创建好看的XML文档, 填写您的持久性以对其进行压力测试,或者匿名从 一项制作服务,Faker是为您服务的。
Faker的灵感主要来自于PHP Faker, Perl Faker,并按Ruby Faker.
_|_|_|_| _|
_| _|_|_| _| _| _|_| _| _|_|
_|_|_| _| _| _|_| _|_|_|_| _|_|
_| _| _| _| _| _| _|
_| _|_|_| _| _| _|_|_| _|
兼容性¶
从版本开始4.0.0
, Faker
已删除对Python 2的支持,仅支持Python
3.5及以上。如果您仍然需要与Python 2兼容,请安装版本3.0.1
在
同时,请考虑更新您的代码库以支持Python3,这样您就可以享受
最新功能Faker
必须提供。请参阅扩展文档有关更多详细信息,特别是
如果要从版本升级2.0.4
和下面,因为可能会有突破性的变化。
这个包以前也被称为fake-factory
它在结束时就已经被弃用了
从那时起,很多事情都发生了变化,所以请确保您的项目及其依赖项
不要依赖旧的包装。
基本用法¶
使用pip安装:
pip install 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()
产生不同的(随机)结果。
这是因为冒牌者转发faker.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 fixtures¶
Faker
也有自己的pytest
该插件提供了一个faker
您可以在您的
测试。请查看pytest fixture文档了解更多信息。
提供商¶
每个生成器属性(如name
, address
,以及lorem
)被称为“假的”。造假者生成器有很多这样的东西,
打包成“提供者”。
from faker import Faker
from faker.providers import internet
fake = Faker()
fake.add_provider(internet)
print(fake.ipv4_private())
本地化¶
faker.Faker
可以将区域设置作为参数,以返回LOCALIZED
数据。如果未找到本地化提供程序,则工厂将回退到
默认的en_US区域设置。
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
# 山田 桃子
您可以在源代码中检查可用的Faker区域设置,位于 提供程序包。Faker的本地化是一个持续的过程,因为 我们需要你的帮助。请不要犹豫创建本地化的 为您自己的区域设置提供程序,并提交拉取请求(PR)。
命令行用法¶
安装后,您可以从命令行调用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}
其他客户列表 要使用的提供程序。请注意,这是包含以下内容的包的导入路径 您的提供程序类,而不是自定义提供程序类本身。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': u'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):
return 'bar'
# then add new provider to faker instance
fake.add_provider(MyProvider)
# now you can use:
fake.foo()
# 'bar'
如何自定义Lorem提供程序¶
如果您不想使用 默认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.'
如何与工厂男孩一起使用¶
工厂男孩已与集成在一起的产品一起出厂Faker
。只需使用factory.Faker
一种方法factory_boy
:
import factory
from myapp.models import Book
class BookFactory(factory.Factory):
class Meta:
model = Book
title = factory.Faker('sentence', nb_words=4)
author_name = factory.Faker('name')
访问random实例¶
The .random
属性返回random.Random
用于生成值:
from faker import Faker
fake = Faker()
fake.random
fake.random.getstate()
默认情况下,所有生成器共享相同的random.Random
,其中
可通过以下方式访问from faker.generator import random
。使用此功能可能会
对于想要影响所有赝品实例的插件非常有用。
唯一值¶
通过使用.unique
属性,您可以保证
任何生成的值对于此特定实例都是唯一的。
from faker import Faker
fake = Faker()
names = [fake.unique.first_name() for i in range(500)]
assert len(set(names)) == len(names)
Calling fake.unique.clear()
清除已看到的值。
注意,为了避免无限循环,在多次尝试查找唯一的
值,则Faker将抛出UniquenessException
。当心生日
悖论,碰撞
比你想象的更有可能。
from faker import Faker
fake = Faker()
for i in range(3):
# Raises a UniquenessException
fake.unique.boolean()
此外,只能使用可散列的参数和返回值
使用.unique
.
设定发电机种子¶
在使用Faker进行单元测试时,您通常希望生成相同的
数据集。为方便起见,生成器还提供了seed()
方法,
其为共享随机数生成器提供种子。使用调用相同的方法
相同版本的faker和Seed会产生相同的结果。
from faker import Faker
fake = Faker()
Faker.seed(4321)
print(fake.name())
# 'Margaret Boehm'
每个生成器还可以切换到其自己的random.Random
,
与共享文件分开,方法是使用seed_instance()
方法,该方法执行
同样的方式。例如:
from faker import Faker
fake = Faker()
fake.seed_instance(4321)
print(fake.name())
# 'Margaret Boehm'
请注意,由于我们不断更新数据集,因此不能保证
各补丁版本之间保持一致。如果在测试中硬编码结果,请确保
您将版本的Faker
一直到补丁编号。
如果您使用的是pytest
,您可以将faker
通过定义一个faker_seed
固定装置。请查看pytest fixture文档了解更多信息。