[编程基础] Python数据生成库Faker总结

Python Faker教程展示了如何使用Faker软件包在Python中生成伪数据。我们使用joke2k/faker包。

1 介绍

Faker是一个生成假数据的Python库。伪数据通常用于测试或用一些伪数据填充数据库。Python Faker很大程度上受到了PHP的Faker、Perl的Data::Faker和Ruby的Faker的启发。该软件包与composer一起安装。另外,我们安装了Dumper,它在转储变量时提供更好的控制台输出。

官方项目地址见:
https://github.com/joke2k/faker

官方文档地址见:
https://faker.readthedocs.io/en/master/index.html

# pip install Faker
# pip install Dumper

通过faker.Faker()创建并初始化faker数据生成器,该生成器可以通过访问以数据类型命名的属性来生成数据。
Faker将数据生成委托给提供者。默认提供程序使用英语区域设置。Faker支持其他地区语言(包括中文);它们的完成程度不同。支持的语言列表见:
https://faker.readthedocs.io/en/master/locales.html

1.1 简单的使用

下面示例输出假名称,地址和文本。

from faker import Faker

faker = Faker()

print(f'name: {faker.name()}')
print(f'address: {faker.address()}')
print(f'text: {faker.text()}')
name: Sara Hood
address: 5550 Soto Extension
Katherinetown, HI 43412
text: Personal onto section structure. Song thing prove blue answer ok left sure.
Talk situation ahead soon parent score.
She break rather couple enjoy to. Relate prove possible wrong.

当然可以在创建Faker生成器时通过语言代号指定语言,如下所示。常用支持的语言代号见:
https://faker.readthedocs.io/en/master/locales.html

from faker import Faker

# 默认是en_US
faker = Faker('zh_CN')

print(f'name: {faker.name()}')
print(f'address: {faker.address()}')
print(f'text: {faker.text()}')
name: 萧坤
address: 新疆维吾尔自治区阳县锡山杭州街Y座 851331
text: 当然看到帮助汽车的话在线.位置但是不是.欢迎不是所以通过计划为了.
提高特别手机.中心一直我们.
正在经营手机以后一样情况.特别网上这里介绍.
到了科技阅读.当前经营主要.注册投资时候.
影响这种公司软件社区记者大小资料.支持那些一种客户有限人民日期今天.建设历史计划公司活动那么所以.
认为文章新闻一般中文帖子.文章主要那个发展增加所有.
经验发布广告比较历史应该.单位需要系统他们.

1.2 Faking names

在下面示例中,我们伪造与用户名有关的数据。

from faker import Faker

faker = Faker('zh_CN')

# 名字
print(f'Name: {faker.name()}')
# 名
print(f'First name: {faker.first_name()}')
# 姓
print(f'Last name: {faker.last_name()}')

print('--------------------------')

# 男人名
print(f'Male name: {faker.name_male()}')
# 女人名
print(f'Female name: {faker.name_female()}')
Name: 马淑英
First name: 玉英
Last name: 罗
--------------------------
Male name: 黄小红
Female name: 黄建华

1.3 Faking jobs

使用job()接口生成假的工作。使用如下:

from faker import Faker

faker = Faker('zh_CN')

for _ in range(6):
    print(faker.job())
网站编辑
呼叫中心客服
招聘专员/助理
测试员
畜牧师
水工

1.4 Faking currencies

下面的示例为货币创建假数据

from faker import Faker

faker = Faker('zh_CN')
# 仅支持英文输出
# 生成货币
print(f'currency: {faker.currency()}')
# 货币名
print(f'currency name: {faker.currency_name()}')
# 货币代号
print(f'currency code: {faker.currency_code()}')
currency: ('FJD', 'Fijian dollar')
currency name: Tanzanian shilling
currency code: PYG

1.5 Faking words

下面的示例为单词创建假数据

from faker import Faker

faker = Faker('zh_CN')

# 创建一个单词
print(f'a word: {faker.word()}')
# 创建六个单词
print(f'six words: {faker.words(6)}')

words = ['春天','夏天','秋天','冬天','白天','黑天']
# 从预定义的单词列表中创建假单词
print(f'customized unique words: {faker.words(2, words, True)}')
a word: 而且
six words: ['如何', '如果', '自己', '单位', '同时', '来自']
customized unique words: ['春天', '冬天']

1.6 Faking profiles

Faker可以使用simple_profile()创建简单的虚拟配置文件,使用profile()创建扩展配置文件。通过profile可以生成信息概要文件,该示例为男性和女性创建虚拟概要文件。

from faker import Faker
import dumper

faker = Faker('zh_CN')

profile1 = faker.simple_profile()
dumper.dump(profile1)

print('--------------------------')

profile2 = faker.simple_profile('M')
dumper.dump(profile2)

print('--------------------------')

profile3 = faker.profile(sex='F')
dumper.dump(profile3)
<dict at 0x7f4ebfa51730>:
  username: 'napeng'
  name: '林冬梅'
  sex: 'M'
  address: '甘肃省荆门县白云李街w座 407872'
  mail: 'rbai@yahoo.com'
  birthdate: <str at 0x7f4ebf6ec530>: 'datetime.date(1908, 11, 20)'
--------------------------
<dict at 0x7f4ebefbe6e0>:
  username: 'zhaojing'
  name: '郑璐'
  sex: 'M'
  address: '广西壮族自治区桂英县魏都武汉路o座 706400'
  mail: 'fanwei@yahoo.com'
  birthdate: <str at 0x7f4ebeea08f0>: 'datetime.date(1953, 9, 22)'
--------------------------
<dict at 0x7f4ebf5aa8c0>:
  job: '股票/期货操盘手'
  company: '合联电子科技有限公司'
  ssn: '211403193711125294'
  residence: '山东省利县清河舒路N座 674496'
  current_location: <tuple at 0x7f4ebf705460>
    0: <str at 0x7f4ebeea0df0>: "Decimal('23.160202')"
    1: <str at 0x7f4ebeea0df0>: "Decimal('-132.788799')"
  blood_group: 'A+'
  website: ['https://www.wp.cn/', 'https://www.pingshao.cn/']
  username: 'kdai'
  name: '王玲'
  sex: 'F'
  address: '西藏自治区磊县白云济南街h座 652495'
  mail: 'fang20@hotmail.com'
  birthdate: <str at 0x7f4ebeea08f0>: 'datetime.date(1985, 10, 18)'

1.7 Faking numbers

Faker允许生成随机数字和整数。

from faker import Faker

faker = Faker('zh_CN')

# 随机数
print(f'Random int: {faker.random_int()}')
# random_int()中指定生成0到100数字
print(f'Random int: {faker.random_int(0, 100)}')
# 生成数字0到9
print(f'Random digit: {faker.random_digit()}')
Random int: 837
Random int: 72
Random digit: 1

1.8 Faking hashes and uuids

hashes和uuids的伪造支持。下面示例生成三个伪哈希和一个uuid值

from faker import Faker

faker = Faker('zh_CN')

print(f'md5: {faker.md5()}')
print(f'sha1: {faker.sha1()}')
print(f'sha256: {faker.sha256()}')
print(f'uuid4: {faker.uuid4()}')
md5: 01c570bf837bd5dd4a0d1f21d2d1005f
sha1: 005a8185c78d72bfb6174f672ebcc65e92b3a2c8
sha256: 0157d784e175bbcacef6334b4b840634b1af721212a9a582681dcd0a65435d6d
uuid4: 013bd385-9d37-4ecb-bd33-2afafb8b1350

Faker有多个用于伪造Internet相关数据的访问器。下面示例显示了各种与Internet相关的数据,包括电子邮件,域名,段,IP地址和URL。其中一些数据是真实存在的,只是伪造随机选择了互联网的数据,如url可以直接打开。

from faker import Faker

faker = Faker('zh_CN')

print(f'Email: {faker.email()}')
print(f'Safe email: {faker.safe_email()}')
print(f'Free email: {faker.free_email()}')
print(f'Company email: {faker.company_email()}')

print('------------------------------------')

print(f'Host name: {faker.hostname()}')
print(f'Domain name: {faker.domain_name()}')
print(f'Domain word: {faker.domain_word()}')
print(f'TLD: {faker.tld()}')

print('------------------------------------')

print(f'IPv4: {faker.ipv4()}')
print(f'IPv6: {faker.ipv6()}')
print(f'MAC address: {faker.mac_address()}')

print('------------------------------------')

print(f'Slug: {faker.slug()}')
print(f'Image URL: {faker.image_url()}')
Email: juan03@yahoo.com
Safe email: dingxiuying@example.com
Free email: xiulanfeng@hotmail.com
Company email: tao55@yangxiuying.cn
------------------------------------
Host name: srv-22.yanping.cn
Domain name: zou.cn
Domain word: 96
TLD: cn
------------------------------------
IPv4: 219.38.223.8
IPv6: 247e:c6c6:eaaa:2466:b17f:ab9b:cb64:3d86
MAC address: f4:89:6f:d4:6c:69
------------------------------------
Slug: 
Image URL: https://placeimg.com/654/868/any

1.10 Faking date and time

Faker有很多伪造日期和时间值的方法。

下面示例显示了伪造的生日,日期时间部分,时区和AM / PM方法

from faker import Faker

faker = Faker('zh_CN')

# 生日
print(f'Date of birth: {faker.date_of_birth()}')
# 世纪
print(f'Century: {faker.century()}')
# 年
print(f'Year: {faker.year()}')
# 月
print(f'Month: {faker.month()}')
# 英文月名
print(f'Month name: {faker.month_name()}')
# 星期名
print(f'Day of week: {faker.day_of_week()}')
# 日号
print(f'Day of month: {faker.day_of_month()}')
# 时区
print(f'Time zone: {faker.timezone()}')
# 上午下午
print(f'AM/PM: {faker.am_pm()}')
Date of birth: 1962-01-19
Century: IX
Year: 1988
Month: 08
Month name: April
Day of week: Thursday
Day of month: 10
Time zone: Pacific/Galapagos
AM/PM: AM

第二个示例显示了在当前世纪,十年,年份或月份中生成日期时间值的方法。它还包括时间序列值的生成。

from faker import Faker

faker = Faker('zh_CN')

# 本世纪的日期时间
print(f'Datetime this century: {faker.date_time_this_century()}')
# 近十年的日期时间
print(f'Datetime this decade: {faker.date_time_this_decade()}')
# 今年的日期时间
print(f'Datetime this year: {faker.date_time_this_year()}')
# 本月的日期时间
print(f'Datetime this month: {faker.date_time_this_month()}')

print('-------------------------')

# # 本世纪的日期
print(f'Date this century: {faker.date_this_century()}')
# 近十年的日期
print(f'Date this decade: {faker.date_this_decade()}')
# 今年的日期
print(f'Date this year: {faker.date_this_year()}')
# 本月的日期
print(f'Date this month: {faker.date_this_month()}')

print('-------------------------')

# 时间间隔
TOTAL_SECONDS = 60*60*24*2 # two days
# 伪造到现在为止时间间隔为两天的序列
series = faker.time_series(start_date='-12d', end_date='now', precision=TOTAL_SECONDS)

for val in series:
    print(val[0])
Datetime this century: 2013-01-08 02:27:47
Datetime this decade: 2020-03-01 18:24:33
Datetime this year: 2020-06-20 01:18:59
Datetime this month: 2020-06-08 01:25:48
-------------------------
Date this century: 2012-06-16
Date this decade: 2020-02-25
Date this year: 2020-04-23
Date this month: 2020-06-14
-------------------------
2020-06-09 11:51:25
2020-06-11 11:51:25
2020-06-13 11:51:25
2020-06-15 11:51:25
2020-06-17 11:51:25
2020-06-19 11:51:25

1.11 faker函数列表

faker提供许多函数接口,本文并没有全部列出,具体见官方文档。可用的函数列表如下。直接在官方文档地址
https://faker.readthedocs.io/en/master/providers.html,点击对应的函数列表链接,便有对应的使用说明。

'''
faker.providers
faker.providers.address
faker.providers.automotive
faker.providers.bank
faker.providers.barcode
faker.providers.color
faker.providers.company
faker.providers.credit_card
faker.providers.currency
faker.providers.date_time
faker.providers.file
faker.providers.geo
faker.providers.internet
faker.providers.isbn
faker.providers.job
faker.providers.lorem
faker.providers.misc
faker.providers.person
faker.providers.phone_number
faker.providers.profile
faker.providers.python
faker.providers.ssn
faker.providers.user_agent
'''

2 参考

http://zetcode.com/python/faker/

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

posted @ 2022-12-19 21:48  落痕的寒假  阅读(243)  评论(0编辑  收藏  举报