1. 背景
在軟件需求、開發(fā)盘榨、測試過程中喻粹,有時候需要使用一些測試數據,針對這種情況草巡,我們一般要么使用已有的系統(tǒng)數據守呜,要么需要手動制造一些數據。由于現在的業(yè)務系統(tǒng)數據多種多樣山憨,千變萬化查乒。在手動制造數據的過程中,可能需要花費大量精力和工作量郁竟,此項工作既繁復又容易出錯玛迄,比如要構造一批用戶三要素(姓名、手機號枪孩、身份證)憔晒、構造一批銀行卡數據、或構造一批地址通訊錄等蔑舞。
這時候拒担,人們常常為了偷懶快捷,測試數據大多數可能是類似這樣子的:
測試,?1300000?000123456
張三,?1310000?000123456
李四,?1320000?000234567
王五,?1330000?000345678
測試數據中包括了大量的“測試XX”攻询,要么就是隨手在鍵盤上一頓亂敲从撼,都是些無意義的假數據。
你是不是這樣做的呢钧栖?坦白的說低零,有過一段時間,筆者偶爾也是這么干的拯杠。
但是掏婶,細想一下,這樣的測試數據潭陪,不僅要自己手動敲雄妥,還假的不能再假最蕾,浪費時間、浪費人力老厌、數據價值低瘟则。
而且,部分數據的手工制造還無法保障:比如UUID類數據枝秤、MD5醋拧、SHA加密類數據等。
為了幫助大家解決這個問題淀弹,更多還是提供種一種解決方案或思路丹壕,今天給大家分享一款Python造數據利器:Faker庫,利用它可以生成一批各種各樣的看起來“像真的一樣”的假數據垦页。
2. Faker介紹 雀费、安裝
2.1 Faker是什么
Faker是一個Python包,主要用來創(chuàng)建偽數據痊焊,使用Faker包,無需再手動生成或者手寫隨機數來生成數據忿峻,只需要調用Faker提供的方法薄啥,即可完成數據的生成。
項目地址:
https://github.com/joke2k/faker
2.2 安裝
安裝 Faker 很簡單逛尚,使用 pip 方式安裝:
pip?install?Faker
除了pip 安裝垄惧,也可以通過上方提供的github地址,來下載編譯安裝绰寞。
(py3_env)????py3_env?pip?show?faker
Name:?Faker
Version:4.1.1
Summary:?Fakerisa?Python?package?that?generates?fake?dataforyou.
Home-page:?https://github.com/joke2k/faker
Author:?joke2k
Author-email:?joke2k@gmail.com
License:?MIT?License
Location:?/Users/xxx/work_env/py3_env/lib/python3.7/site-packages
Requires:?python-dateutil,?text-unidecode
Required-by:
3. Faker常用使用
3.1 基本用法
Faker 的使用也是很簡單的到逊,從 faker 模塊中導入類,然后實例化這個類滤钱,就可以調用方法使用了:
fromfakerimportFaker
fake?=?Faker()
name?=?fake.name()
address?=?fake.address()
print(name)
print(address)
#?輸出信息
Ashley?Love
074Lee?Village?Suite464
Dawnborough,?RI44234
這里我們造了一個名字和一個地址觉壶,由于 Faker 默認是英文數據,所以如果我們需要造其他語言的數據件缸,可以使用 locale參數铜靶,例如:
fromfakerimportFaker
fake?=?Faker(locale='zh_CN')
name?=?fake.name()
address?=?fake.address()
print(name)
print(address)
#?輸出信息
張艷
海南省上海市朝陽邱路y座175208
是不是看起來還不錯,但是有一點需要注意他炊,這里的地址并不是真實的地址争剿,而是隨機組合出來的,也就是將省痊末、市蚕苇、道路之類的隨機組合在一起。
這里介紹幾個比較常見的語言代號:
簡體中文:zh_CN
繁體中文:zh_TW
美國英文:en_US
英國英文:en_GB
德文:de_DE
日文:ja_JP
韓文:ko_KR
法文:fr_FR
例如將語言修改為繁體中文fake = Faker(locale='zh_TW')凿叠,輸出信息為:
楊志宏
100?中壢博愛街10號9樓
3.2 常用函數
除了上述介紹的fake.name和fake.address生成姓名和地址兩個函數外涩笤,常用的faker函數按類別劃分有如下一些常用方法嚼吞。
1、地理信息類
fake.city_suffix():市辆它,縣
fake.country():國家
fake.country_code():國家編碼
fake.district():區(qū)
fake.geo_coordinate():地理坐標
fake.latitude():地理坐標(緯度)
fake.longitude():地理坐標(經度)
fake.postcode():郵編
fake.province():省份
fake.address():詳細地址
fake.street_address():街道地址
fake.street_name():街道名
fake.street_suffix():街誊薄、路
2、基礎信息類
ssn():生成身份證號
bs():隨機公司服務名
company():隨機公司名(長)
company_prefix():隨機公司名(短)
company_suffix():公司性質
credit_card_expire():隨機信用卡到期日
credit_card_full():生成完整信用卡信息
credit_card_number():信用卡號
credit_card_provider():信用卡類型
credit_card_security_code():信用卡安全碼
job():隨機職位
first_name_female():女性名
first_name_male():男性名
last_name_female():女姓
last_name_male():男姓
name():隨機生成全名
name_female():男性全名
name_male():女性全名
phone_number():隨機生成手機號
phonenumber_prefix():隨機生成手機號段
3锰茉、計算機基礎呢蔫、Internet信息類
ascii_company_email():隨機ASCII公司郵箱名
ascii_email():隨機ASCII郵箱:
company_email():
email():
safe_email():安全郵箱
4、網絡基礎信息類
domain_name():生成域名
domain_word():域詞(即飒筑,不包含后綴)
ipv4():隨機IP4地址
ipv6():隨機IP6地址
mac_address():隨機MAC地址
tld():網址域名后綴(.com,.net.cn,等等片吊,不包括.)
uri():隨機URI地址
uri_extension():網址文件后綴
uri_page():網址文件(不包含后綴)
uri_path():網址文件路徑(不包含文件名)
url():隨機URL地址
user_name():隨機用戶名
image_url():隨機URL地址
5、瀏覽器信息類
chrome():隨機生成Chrome的瀏覽器user_agent信息
firefox():隨機生成FireFox的瀏覽器user_agent信息
internet_explorer():隨機生成IE的瀏覽器user_agent信息
opera():隨機生成Opera的瀏覽器user_agent信息
safari():隨機生成Safari的瀏覽器user_agent信息
linux_platform_token():隨機Linux信息
user_agent():隨機user_agent信息
6协屡、數字類
numerify():三位隨機數字
random_digit():0~9隨機數
random_digit_not_null():1~9的隨機數
random_int():隨機數字俏脊,默認0~9999,可以通過設置min,max來設置
random_number():隨機數字肤晓,參數digits設置生成的數字位數
pyfloat():
left_digits=5 #生成的整數位數, right_digits=2 #生成的小數位數, positive=True #是否只有正數
pyint():隨機Int數字(參考random_int()參數)
pydecimal():隨機Decimal數字(參考pyfloat參數)
7爷贫、文本、加密類
pystr():隨機字符串
random_element():隨機字母
random_letter():隨機字母
paragraph():隨機生成一個段落
paragraphs():隨機生成多個段落
sentence():隨機生成一句話
sentences():隨機生成多句話补憾,與段落類似
text():隨機生成一篇文章
word():隨機生成詞語
words():隨機生成多個詞語漫萄,用法與段落,句子盈匾,類似
binary():隨機生成二進制編碼
boolean():True/False
language_code():隨機生成兩位語言編碼
locale():隨機生成語言/國際 信息
md5():隨機生成MD5
null_boolean():NULL/True/False
password():隨機生成密碼,可選參數:length:密碼長度腾务;special_chars:是否能使用特殊字符;digits:是否包含數字削饵;upper_case:是否包含大寫字母岩瘦;lower_case:是否包含小寫字母
sha1():隨機SHA1
sha256():隨機SHA256
uuid4():隨機UUID
8、時間信息類
date():隨機日期
date_between():隨機生成指定范圍內日期窿撬,參數:start_date启昧,end_date
date_between_dates():隨機生成指定范圍內日期,用法同上
date_object():隨機生產從1970-1-1到指定日期的隨機日期尤仍。
date_time():隨機生成指定時間(1970年1月1日至今)
date_time_ad():生成公元1年到現在的隨機時間
date_time_between():用法同dates
future_date():未來日期
future_datetime():未來時間
month():隨機月份
month_name():隨機月份(英文)
past_date():隨機生成已經過去的日期
past_datetime():隨機生成已經過去的時間
time():隨機24小時時間
timedelta():隨機獲取時間差
time_object():隨機24小時時間箫津,time對象
time_series():隨機TimeSeries對象
timezone():隨機時區(qū)
unix_time():隨機Unix時間
year():隨機年份
9、python 相關方法
profile():隨機生成檔案信息
simple_profile():隨機生成簡單檔案信息
pyiterable()
pylist()
pyset()
pystruct()
pytuple()
pydict()
可以用dir(fake)宰啦,看Faker庫都可以fake哪些數據苏遥,目前Faker支持近300種數據,此外還支持自己進行擴展赡模。
有了這些生成數據函數之后用fake對象就可以調用不同的方法生成各種數據了田炭。
3.3 常用數據場景
1、構造通訊錄記錄
fromfakerimportFaker
fake?=?Faker(locale='zh_CN')
for_inrange(5):
print('姓名:',?fake.name(),'?手機號:',?fake.phone_number())
#?輸出信息:
姓名:?駱柳??手機號:18674751460
姓名:?薛利??手機號:13046558454
姓名:?翟麗麗??手機號:15254904803
姓名:?宋秀珍??手機號:13347585045
姓名:?孔桂珍??手機號:18258911504
2漓柑、構造信用卡數據
from?faker?import?Faker
fake?=?Faker(locale='zh_CN')
print('Card?Number:',?fake.credit_card_number(card_type=None))
print('Card?Provider:',?fake.credit_card_provider(card_type=None))
print('Card?Security?Code:',?fake.credit_card_security_code(card_type=None))
print('Card?Expire:',?fake.credit_card_expire())
#?輸出信息:
Card?Number:?676181530350
Card?Provider:?Diners?Club?/?Carte?Blanche
Card?Security?Code:?615
Card?Expire:?09/21
3教硫、生成個人檔案信息
fromfakerimportFaker
fake?=?Faker(locale='zh_CN')
print(fake.profile())
#?輸出信息
{'job':'美術指導','company':'易動力傳媒有限公司','ssn':'370703197807179500','residence':'廣西壯族自治區(qū)旭縣薊州東莞街L座?784064','current_location':?(Decimal('78.3608745'),?Decimal('-95.946407')),'blood_group':'B+','website':?['https://www.jiewang.org/','https://www.longsong.cn/','https://jingyong.net/','https://58.cn/'],'username':'qinqiang','name':'唐偉','sex':'F','address':'新疆維吾爾自治區(qū)建華市東麗拉薩街a座?875743','mail':'shenyang@hotmail.com','birthdate':?datetime.date(2014,4,27)}
4叨吮、生成Python相關結構信息
fromfakerimportFaker
fake?=?Faker(locale='zh_CN')
print('生成Python字典:?{}'.format(fake.pydict(
nb_elements=10,?variable_nb_elements=True)))#?Python字典
print('生成Python可迭代對象:{}.'.format(fake.pyiterable(
nb_elements=10,?variable_nb_elements=True)))#?Python可迭代對象
print('生成Python結構:{}'.format(fake.pystruct(count=1)))#?Python結構
#?輸出信息
成Python字典:?{'論壇':'nVcSbHlrcrhIBtwByVUM','直接':'drkyFUNcNxdbwYKhRLEZ','成功':'https://fang.cn/main/search/blog/search/','沒有':?datetime.datetime(2006,2,24,15,40,14),'原因':404,'作者':'OTJjsFHQklpUvTPtLCqP'}
生成Python可迭代對象:{1088,'ignqbohwYRxqolLEzSti','http://gang.cn/main/search.php','zRnNYdIpPXUxEVISHbvS','ToZxuBetghvlPHUumAvi',9830,'OYAjoKeVNGhHMLgnYUAw',970446.888,-17681479853.4069,872236250787063.0,?datetime.datetime(2017,12,24,5,58,58),'aRSfxiUSuMqHXvKCCkMJ'}
生成Python結構:(['cKwOvdCEFOhCERMSMXSf'],?{'只有':'hhwGCmjkHMOUjBTDztXp'},?{'還有':?{0:'vjcNqpnRbNUUxXpgVyvh',1:?[8725,7125,'aTSJssAJUKpuRLcbiwyK'],2:?{0:'RmWlFQQpVZIQkxZPfJnq',1:'efsUVLgeStXbCOJDuJCf',2:?['FgZQLCRjUTmEbBdDMEPZ','https://min.cn/search/faq/']}}})
4. 自定義Faker數據類型
如果這些數據還不夠生成數據使用,Faker還支持創(chuàng)建自定義的Provider生成數據瞬矩。
fromfakerimportFaker
fromfaker.providersimportBaseProvider
#?創(chuàng)建自定義Provider
classCustomProvider(BaseProvider):
defcustomize_type(self):
return'test_Faker_customize_type'
#?添加Provider
fake?=?Faker()
fake.add_provider(CustomProvider)
print(fake.customize_type())
是不是十分簡單茶鉴,以后常用的數據就可以自己創(chuàng)建Provider用自動化的方法生成了,不僅節(jié)省了時間景用,復用性也變高了涵叮。
5. 總結
這些只是其中的一些常見的數據,Faker 可以造的數據遠不止這些類型伞插。相信通過本文的介紹割粮,大家應該對 Faker 不陌生了吧。
此外媚污,作為一個開源的庫舀瓢,Faker的源碼是非常值得研究的,也是Python新手可以用來練開源項目的利器耗美。
這是之前入門學習Python時候的學習資料京髓,非常全面,從Python基礎商架、到web開發(fā)朵锣、數據分析、機器學習甸私、深度學習、金融量化統(tǒng)統(tǒng)都有飞傀,該手冊是HTML版本皇型,左側是目錄,可以點擊砸烦,右側是對目錄知識點的講解弃鸦,適合python學習者,