Faker是一个Python包,可以为您生成假数据。
项目描述
Faker是一个Python包,可以为您生成假数据。无论您需要启动数据库、创建看起来不错的XML文档、填充持久层进行压力测试,还是匿名化从生产服务中获取的数据,Faker都是您的选择。
Faker深受PHP Faker、Perl Faker和Ruby Faker的启发。
_|_|_|_| _| _| _|_|_| _| _| _|_| _| _|_| _|_|_| _| _| _|_| _|_|_|_| _|_| _| _| _| _| _| _| _| _| _|_|_| _| _| _|_|_| _|
兼容性
从版本 4.0.0 开始,Faker 停止了对 Python 2 的支持,从版本 5.0.0 开始仅支持 Python 3.7 及以上版本。如果您仍然需要 Python 2 兼容性,请在此期间安装版本 3.0.1,并请考虑更新您的代码库以支持 Python 3,这样您就可以享受 Faker 提供的最新功能。有关更多详细信息,请参阅扩展文档,特别是如果您是从版本 2.0.4 及以下版本升级的,因为可能会有破坏性变更。
此软件包之前也被称为 fake-factory,截至 2016 年底已被弃用,自那时以来发生了许多变化,因此请确保您的项目和其依赖项不依赖于旧软件包。
基本用法
使用 pip 安装
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() 都会产生不同的(随机)结果。这是因为 faker 将 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 修复
Faker 还有一个自己的 pytest 插件,该插件提供了一个可以在您的测试中使用的 faker 修复。请参阅 pytest 修复文档 以了解更多信息。
提供者
每个生成器属性(如 name、address 和 lorem)都被称为“fake”。faker 生成器有多个这样的属性,封装在“提供者”中。
from faker import Faker
from faker.providers import internet
fake = Faker()
fake.add_provider(internet)
print(fake.ipv4_private())
本地化
faker.Faker 可以接受一个区域设置作为参数,以返回本地化数据。如果没有找到本地化提供者,工厂将回退到默认的 US English LCID 字符串,即: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
# 山田 桃子
您可以在源代码中的 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类的包的导入路径,而不是自定义提供者类本身。
fake:是生成输出要使用的假名,例如name、address或text
[fake argument ...]:传递给假的可选参数(例如,profile假名以逗号分隔的字段名列表作为第一个参数)
示例
$ 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;
如何创建Provider
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'
如何创建动态Provider
动态提供者可以读取外部源中的元素。
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提供者
如果您不想使用默认的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.'
如何与Factory Boy一起使用
Factory Boy已经包含了对Faker的集成。只需使用factory_boy的factory.Faker方法。
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实例
生成器上的.random属性返回用于生成值的random.Random实例。
from faker import Faker
fake = Faker()
fake.random
fake.random.getstate()
默认情况下,所有生成器都共享相同的random.Random实例,可以通过from faker.generator import random访问。使用此方法可能对想要影响所有Faker实例的插件很有用。
唯一值
通过使用生成器上的.unique属性,您可以保证任何生成的值对于此特定实例都是唯一的。
from faker import Faker
fake = Faker()
names = [fake.unique.first_name() for i in range(500)]
assert len(set(names)) == len(names)
调用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版本相同的情况下会产生相同的结果。
from faker import Faker
fake = Faker()
Faker.seed(4321)
print(fake.name())
# 'Margaret Boehm'
每个生成器也可以通过使用seed_instance()方法切换到使用其自己的random.Random实例,该方法与seed()方法作用相同。例如
from faker import Faker
fake = Faker()
fake.seed_instance(4321)
print(fake.name())
# 'Margaret Boehm'
请注意,随着我们不断更新数据集,结果在补丁版本之间可能不一致。如果您在测试中硬编码结果,请确保将Faker的版本锁定到补丁号。
如果您正在使用pytest,可以通过定义一个faker_seed固定值来初始化faker固定值。请查阅pytest固定值文档以获取更多信息。
测试
运行测试
$ tox
为默认区域设置的提供者编写文档
$ python -m faker > docs.txt
为特定区域设置的提供者编写文档
$ python -m faker --lang=de_DE > docs_de.txt
贡献
请参阅CONTRIBUTING。
许可
Faker在MIT许可下发布。有关详细信息,请参阅捆绑的LICENSE文件。
致谢
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。
源分布
构建分布
Faker-30.1.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e0593931bd7be9a9ea984b5d8c302ef1cec19392585d1e90d444199271d0a94d |
|
MD5 | 2ec2d67bb1078c688ece6fe2eac7a54f |
|
BLAKE2b-256 | 78f4a6fe96b1bc0a8b864ddcd087e7909d8c6ccb74a1247baadbf5c7094a9067 |
Faker-30.1.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | dbf81295c948270a9e96cd48a9a3ebec73acac9a153d0c854fbbd0294557609f |
|
MD5 | 391ab00137420a22268e69b543f31088 |
|
BLAKE2b-256 | 614934f3615d1f4770f70cda4df1ce09d1203cf66b62baabac307c28887c69af |