使用 Faker 库生成假数据

简介: 使用 Faker 库生成假数据

在做 Web 开发时,经常需要构造一些测试数据,每次都手动构造数据都是非常麻烦的操作,并且效率很低。在 Python 界有一个叫 Faker 的库就是用来解决这个问题的。

Faker 简单使用

可以使用 pip 来安装 Faker

pip install Faker

Faker 库使用起来非常简单,示例代码如下:

>>> from faker import Faker
>>> fake = Faker()
>>> fake.name()
'Emily Jones DDS'
>>> fake.address()
'4204 Wallace Highway Suite 512\nJohnsonborough, ME 69851'
>>> fake.text()
'Mean through magazine black. Where exist deal parent.\nDifference though during too same.\nWhy result character seem car course. Seven east meeting scientist.'

Faker 提供了一个 Faker 类,使用前需要实例化为一个 fake 对象,需要造什么类型的假数据,只需要调用实例对象的方法即可。

fake.name() 生成一个随机人名,fake.address() 生成随机地址,fake.text() 生成一段随机文本。

可以看到以上生成的数据都为英文,实际上 Faker 支持多种语言,可以在 GitHub 仓库上面查看所有支持的语言。如果想要生成其他语言数据,只需要在实例化 Faker 类时传入代表对应语言的字符串即可,比如要生成中文只需要传入 zh_CN

>>> fake = Faker('zh_CN')
>>> fake.name()
'刘建平'
>>> fake.address()
'广东省南京县南溪天津街A座 827319'
>>> fake.text()
'发生一定工具.之后查看数据然后专业地区.还是以后程序一些.\n数据活动发布运行威望因此.下载影响各种等级很多.\n关系可是选择责任.提供生活如何不能然.\n因此加入目前.\n虽然大小决定那么这么.开发你的研究.\n组织大家谢谢工程.运行一定等级什么.个人开发网站.'

Faker Providers

Faker 实例对象 fake 能够生成多种假数据,但它本身并没有诸如 nameaddress 等方法。fake 对象实际上是一个代理对象,真正能够生成假数据的对象为 ProviderFaker 库内置了多个 Provider 用来生成不同类型的假数据。fake.providers 能够查看所有内置的 Provider

>>> fake.providers
[<faker.providers.user_agent.Provider object at 0x109f19d90>, <faker.providers.ssn.zh_CN.Provider object at 0x109f19b10>, <faker.providers.python.Provider object at 0x109e97c50>, <faker.providers.profile.Provider object at 0x109e97b90>, <faker.providers.phone_number.zh_CN.Provider object at 0x109e97b10>, <faker.providers.person.zh_CN.Provider object at 0x109f19b90>, <faker.providers.misc.en_US.Provider object at 0x109f007d0>, <faker.providers.lorem.zh_CN.Provider object at 0x109f006d0>, <faker.providers.job.zh_CN.Provider object at 0x109f00590>, <faker.providers.isbn.Provider object at 0x109f00750>, <faker.providers.internet.zh_CN.Provider object at 0x109f004d0>, <faker.providers.geo.en_US.Provider object at 0x109e97590>, <faker.providers.file.Provider object at 0x109e977d0>, <faker.providers.date_time.en_US.Provider object at 0x109e97690>, <faker.providers.currency.Provider object at 0x109e97490>, <faker.providers.credit_card.en_US.Provider object at 0x109e97c10>, <faker.providers.company.zh_CN.Provider object at 0x109e97350>, <faker.providers.color.en_US.Provider object at 0x109e97cd0>, <faker.providers.barcode.Provider object at 0x109e97bd0>, <faker.providers.bank.en_GB.Provider object at 0x109e7dc50>, <faker.providers.automotive.en_US.Provider object at 0x109e81c90>, <faker.providers.address.zh_CN.Provider object at 0x109e97c90>]

根据 Provider 名称大概就能猜到其能够生成的假数据类型,如 faker.providers.user_agent.Provider 用来生成随机的 User-Agent 字符串:

>>> fake.chrome(version_from=13, version_to=63, build_from=800, build_to=899)
'Mozilla/5.0 (Linux; Android 2.2.2) AppleWebKit/535.0 (KHTML, like Gecko) Chrome/36.0.846.0 Safari/535.0'
>>> fake.firefox()
'Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/531.2 (KHTML, like Gecko) FxiOS/17.0a5677.0 Mobile/97O054 Safari/531.2'
>>> fake.safari()
'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_12_6 rv:2.0; am-ET) AppleWebKit/532.30.3 (KHTML, like Gecko) Version/5.0.2 Safari/532.30.3'
>>> fake.internet_explorer()
'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 5.01; Trident/4.0)'
>>> fake.user_agent()
'Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.2; Trident/3.1)'

可以看到一些方法还支持传入参数来定义生成数据。

另外还可以增加一些扩展 Provider 来丰富能够生成的假数据类型,具体方法可查看官方文档

常用方法

以下是我个人用的比较多的方法。

>>> fake.name()  # 人名
'李杨'
>>> fake.sentence()  # 句子
'数据你们学生选择.'
>>> fake.text(200)  # 段落
'类型制作业务进行非常浏览有些软件.没有男人不会这么.喜欢电话工作处理社区.\n对于重要她的不能环境.方面通过科技内容组织日期提高由于.关系专业事前可以全国.状态你们最后女人.\n网络根据而且主要不过.大小软件对于所有.我们设计如此感觉客户其中新闻.'
>>> fake.date_time_this_year(before_now=True)  # 早于当前时间
datetime.datetime(2020, 1, 3, 0, 15, 10)
>>> fake.date_time_this_year(after_now=True)  # 晚于当前时间
datetime.datetime(2020, 4, 12, 14, 6, 51)
>>> fake.email(domain='test.com')  # 邮箱
'dgu@test.com'
>>> fake.company()  # 公司
'飞海科技传媒有限公司'
>>> fake.phone_number()  # 手机号
'18980694882'
相关文章
|
缓存 负载均衡 关系型数据库
Pgpool-II实现高可用+读写分离+负载均衡(一)---- 规划及安装
Pgpool-II是一款工作在PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件。提供了连接池、复制、负载均衡、限制过多连接、看门狗、查询缓存等功能。
|
资源调度 安全 网络协议
聊聊 Zookeeper 的 4lw 与信息安全
聊聊 Zookeeper 的 4lw 与信息安全
|
2月前
|
监控 算法 固态存储
Ashampoo UnInstaller使用教程!高效彻底的软件卸载助手(附下载)
Ashampoo UnInstaller 可彻底卸载软件并清理残留文件、注册表等,提升系统速度与稳定性。支持批量卸载、程序迁移、安装保护及实时监控,操作简单,是优化电脑性能的高效工具。
277 1
|
7月前
|
Go
Go语言接口的定义与实现
Go 语言的接口提供了一种灵活的多态机制,支持隐式实现和抽象编程。本文介绍了接口的基本定义、实现方式、空接口的使用、类型断言以及接口组合等核心概念,并探讨了接口与 nil 的关系及应用场景。通过示例代码详细说明了如何利用接口提升代码的可扩展性和可测试性,总结了接口的关键特性及其在依赖注入、规范定义和多态调用中的重要作用。
325 14
|
分布式计算 关系型数据库 MySQL
Sqoop【部署 01】CentOS Linux release 7.5 安装配置 sqoop-1.4.7 解决警告并验证(附Sqoop1+Sqoop2最新版安装包+MySQL驱动包资源)
【2月更文挑战第8天】Sqoop CentOS Linux release 7.5 安装配置 sqoop-1.4.7 解决警告并验证(附Sqoop1+Sqoop2最新版安装包+MySQL驱动包资源)
711 1
|
9月前
|
API
阿里云百炼:零门槛一键搭建 DeepSeek-R1 满血版
本文介绍如何使用阿里云百炼平台和chatbox客户端,一键搭建DeepSeek R1满血版
832 18
|
iOS开发 UED 开发者
iOS 手势中cancelsTouchesInView delaysTouchesBegan delaysTouchesEnded 三种属性的使用
iOS 手势中cancelsTouchesInView delaysTouchesBegan delaysTouchesEnded 三种属性的使用
521 10
|
存储 前端开发 JavaScript
微任务和宏任务有什么区别
微任务和宏任务是JavaScript异步编程中的两个概念。宏任务包括整体代码块、setTimeout等,微任务有Promise、MutationObserver等。主要区别在于执行时机:每次事件循环中,宏任务只执行一个,而微任务会在当前宏任务结束后、下一个宏任务开始前全部执行完毕。
ACE
|
SQL 分布式计算 数据处理
如何创建2024云栖Openlake测试项目和配置环境
2024年云栖大会,MaxCompute 多项重磅产品新功能邀测发布,新特性包括 支持OpenLake的湖仓一体2.0、Object Table支持SQL或MaxFrame处理非结构化数据、Delta Table增量表格式、基于增量物化视图的增量计算、MCQA2.0 SQL引擎查询加速等。其相关特性将在中国区 公共云 北京、上海、杭州、深圳Region 上线开放试用。本文以最佳实践的方式,帮助您创建MaxCompute和周边产品 在Openlake解决方案demo中需要准备的实例、项目和开发环境,并完成配置。欢迎您玩转云栖邀测demo,体验新功能。
ACE
1293 8
|
计算机视觉 Python
成功解决Python导入opencv报错“DLL load failed while importing cv2: 找不到指定的模”
成功解决Python导入opencv报错“DLL load failed while importing cv2: 找不到指定的模”
1213 0