首页Python【Python计算生态】F...

【Python计算生态】Faker——假数据生成库

Python受欢迎的原因之一就是其计算生态丰富,据不完全统计,Python 目前为止有约13万+的第三方库。

本系列将会陆续整理分享一些有趣、有用的第三方库。

文章配套代码获取有以下两种途径:
  • 通过百度网盘获取:
链接:https://pan.baidu.com/s/1FSGLd7aI_UQlCQuovVHc_Q?pwd=mnsj 提取码:mnsj
  • 前往GitHub获取
https://github.com/returu/Python_Ecosystem





01
简介

Faker是一个强大的Python第三方库,用于生成各种类型的假数据,广泛应用于开发、测试和数据分析等领域。该包之前也被称为fake-factory,但2016年底已经废弃。
  • 数据类型丰富:可以生成姓名、地址、电话号码、电子邮件、日期、文本、信用卡信息等多种虚拟数据。
  • 多语言支持:支持多种语言和文化背景的数据生成,例如中文(zh_CN)、英文(en_US)、日文(ja_JP)等。
  • 自定义数据生成规则:允许用户创建自定义Providers,以生成特定类型的虚拟数据。
  • 设置随机种子:通过设置随机种子,可以确保每次生成的数据相同,便于测试。
直接使用pip安装:
pip install Faker
GitHub页面:
https://github.com/joke2k/faker

02
使用

使用faker有以下两种方式:
  • 命令行用法:
安装后,可以通过命令行调用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}:允许使用本地化Providers。
  • -r REPEAT:将生成指定数量的输出。
  • -s SEP:将在每次生成的输出后生成指定的分隔符。
  • -i {my.custom_provider other.custom_provider}:要使用的额外自定义Provider的列表。
  • fake:是要生成输出的假数据的名称,例如nameaddresstext
  • [fake argument …]:传递给假数据的可选参数(例如,profile假数据接受一个可选的以逗号分隔的字段名称列表作为第一个参数)。
示例:
C:UsersXX>faker name
Amy Brandt

C:UsersXX>faker -l zh_CN name
李荣

C:UsersXX>faker -l zh_CN -r=3 name
田晨
张秀荣
孙芳

C:UsersXX>faker profile ssn,birthdate
{'ssn''341-17-7751''birthdate': datetime.date(2017, 3, 20)}


  • 作为Python库:

faker也可以作为Python库集成到Python脚本中,基本用法为:
  • 使用faker.Faker()创建并初始化一个faker生成器;

  • 通过访问以所需数据类型命名的属性来生成数据。

from faker import Faker

# 创建一个 Faker 实例,指定语言为中文
fake = Faker('zh_CN')

# 生成虚拟数据
print("姓名:", fake.name())  # 生成随机姓名
print("地址:", fake.address())  # 生成随机地址
print("电子邮件:", fake.email())  # 生成随机电子邮件
print("电话号码:", fake.phone_number())  # 生成随机电话号码
print("日期:", fake.date())  # 生成随机日期
print("句子:", fake.sentence())  # 生成随机句子
print("段落:", fake.paragraph())  # 生成随机段落
print("文本:", fake.text())  # 生成随机段落

支持全部的数据类型可以查看官方文档。

03
更多设置

faker还提供了更多功能,以高效生成逼真的假数据,满足测试、开发和数据填充等需求。
  • 3.1 Providers:

每个生成器属性(如nameaddress)都被称为“假数据生成器”。一个faker生成器有许多这样的假数据生成器,它们被打包在Providers中。

from faker import Faker
# 导入 phone_number 模块,用于生成与电话号码相关的内容
from faker.providers import phone_number

fake = Faker()
fake.add_provider(phone_number)

# 生成国家的国际电话区号
print(fake.country_calling_code())
# 输出:+243
  • 定义providers

可以通过继承BaseProvider创建自定义Provider类,添加新的生成方法。

# 导入一个Provider或使用默认的Provider
from faker.providers import BaseProvider

# 创建一个新的Provider类
class CustomProvider(BaseProvider):
    def product_name(self):
        products = ["A""B""C""D"]
        return self.random_element(products)

fake = Faker()
# 将新的Provider添加到 faker 实例中
fake.add_provider(CustomProvider)
# 使用
print("虚拟产品名称:", fake.product_name())
# 输出:虚拟产品名称: C
  • 创建动态Provider
动态Provider可以从外部源读取元素。
from faker import Faker
from faker.providers import DynamicProvider

# 创建一个动态Provider
Custom_Dynamic_provider = DynamicProvider(
     provider_name="Custom_Dynamic_provider",
     elements=["A""B""C""D"],
)

fake = Faker()

# 然后将新的Provider添加到 faker 实例中
fake.add_provider(Custom_Dynamic_provider)

# 使用:
fake.Custom_Dynamic_provider()
# 'D'


  • 3.2 Localization:

Faker支持多种语言环境,可以通过locale参数传递相应的语言代码来生成符合特定文化背景的假数据。如果没有找到本地化providers,工厂将回退到默认的LCID字符串,即美国英语的en_US

可以查阅Faker的官方文档,了解更多支持的语言环境。

from faker import Faker
# 生成多个中文名字
fake = Faker('zh_CN')
for _ in range(3):
    print(fake.name())
# 输出:李莉
#      盛利
#      李芳

v3.0.0版本开始faker.Faker也支持多种语言环境。

from faker import Faker
# 多种语言混合数据
fake = Faker(['zh_CN''en_US''ja_JP'])
for _ in range(10):
    print(fake.name())
# 输出:井上 里佳
#      Gregory Vasquez
#      梁瑞
#      ......
  • 3.3 自定义 Lorem Provider:

如果不想使用默认的lorem ipsum文本,可以提供自己的单词集合。

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)
# 输出:'Sugar Jelly sugar oat oat bar wafer.'
  • 3.4 唯一值:

通过使用生成器上的.unique属性,可以保证为这个特定实例生成的任何值都是唯一的。

from faker import Faker
fake = Faker('zh_CN')
names = [fake.unique.name() for i in range(5)]
names
# 输出:['张琴', '马宇', '郭桂荣', '舒娜', '余亮']

3.5 设置随机种子:

Faker生成器还提供了一个seed()方法,该方法为共享随机数生成器设置种子。在调用相同方法且Faker版本相同时,种子会产生相同的结果。

但是,需要注意的是意,由于Faker会不断更新数据集,因此不能保证不同版本的结果一致。

fake = Faker()
Faker.seed(123)
fake = Faker('zh_CN')
print(fake.name())
# 输出:刘桂荣

每个生成器也可以通过使用seed_instance()方法切换到使用自己的random.Random实例,与共享实例分开,其行为方式相同。例如:

from faker import Faker
fake = Faker('zh_CN')
fake.seed_instance(123)

print(fake.name())
# 输出:刘桂荣
  • 3.6 Optimizations:

Faker构造函数有一个名为use_weighting的性能参数。它指定是否尝试使值的频率与现实世界的频率相匹配(例如,英文名字Gary的频率会比Lorimer高得多)。如果use_weightingFalse,那么所有项目都有相等的被选中的机会,选择过程会更快。默认值为True


更多内容可以参考官方文档:

https://faker.readthedocs.io/en/master/

本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments