推薦一款Python開源庫傲茄,技術人必備的造數據神器毅访!

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學習者,

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末幢痘,一起剝皮案震驚了整個濱河市唬格,隨后出現的幾起案子,更是在濱河造成了極大的恐慌颜说,老刑警劉巖购岗,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異门粪,居然都是意外死亡喊积,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門玄妈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來乾吻,“玉大人髓梅,你說我怎么就攤上這事∫锴” “怎么了枯饿?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長诡必。 經常有香客問我奢方,道長,這世上最難降的妖魔是什么擒权? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任袱巨,我火速辦了婚禮,結果婚禮上碳抄,老公的妹妹穿的比我還像新娘愉老。我一直安慰自己,他們只是感情好剖效,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布嫉入。 她就那樣靜靜地躺著,像睡著了一般璧尸。 火紅的嫁衣襯著肌膚如雪咒林。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天爷光,我揣著相機與錄音垫竞,去河邊找鬼。 笑死蛀序,一個胖子當著我的面吹牛欢瞪,可吹牛的內容都是我干的。 我是一名探鬼主播徐裸,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼遣鼓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了重贺?” 一聲冷哼從身側響起骑祟,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎气笙,沒想到半個月后次企,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡健民,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年抒巢,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秉犹。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡蛉谜,死狀恐怖稚晚,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情型诚,我是刑警寧澤客燕,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站狰贯,受9級特大地震影響也搓,放射性物質發(fā)生泄漏。R本人自食惡果不足惜涵紊,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一傍妒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧摸柄,春花似錦颤练、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至跃脊,卻和暖如春宇挫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背酪术。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工器瘪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人绘雁。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓娱局,卻偏偏與公主長得像,于是被迫代替她去往敵國和親咧七。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355