Faker库如何生成数据

注:本人使用的是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 文档以了解更多信息。

供应商

每个生成器属性(如nameaddress和 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_weightingFalse,则所有项目被选中的机会均等,并且选择过程要快得多。默认值为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: 是要为其生成输出的伪造名称,例如 nameaddress, 或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.'

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值