[編程基礎] 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: '[email protected]'
  birthdate: <str at 0x7f4ebf6ec530>: 'datetime.date(1908, 11, 20)'
--------------------------
<dict at 0x7f4ebefbe6e0>:
  username: 'zhaojing'
  name: '鄭璐'
  sex: 'M'
  address: '廣西壯族自治區桂英縣魏都武漢路o座 706400'
  mail: '[email protected]'
  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: '[email protected]'
  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

1.9 Faking internet related data

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: [email protected]
Safe email: [email protected]
Free email: [email protected]
Company email: [email protected]
------------------------------------
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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章