Python Faker的使用(1):基礎使用方法與函數速查

????在軟件需求、開發、測試過程中,有時候需要使用一些測試數據,針對這種情況,我們一般要么使用已有的系統數據,要么需要手動制造一些數據。

? ? 由于現在的業務系統數據多種多樣,千變萬化。在手動制造數據的過程中,可能需要花費大量精力和工作量,此項工作既繁復又容易出錯,而且,部分數據的手造工作無法保障:比如UUID類數據、MD5、SHA加密類數據等。

????現在好了,有一個Python包能夠協助你完成這方面的工作。

Faker首頁

1.什么是Faker

????Faker是一個Python包,開源的GITHUB項目,主要用來創建偽數據,使用Faker包,無需再手動生成或者手寫隨機數來生成數據,只需要調用Faker提供的方法,即可完成數據的生成。

????項目地址:https://github.com/joke2k/faker

2.安裝Faker

? ??方法一:

????????pip install faker

? ??方法二:

????????通過上方提供的github地址,來下載編譯安裝。

3.Faker的使用

3.1、Faker命令

(該段落參考自:MA木易YA? 的相關簡書文章)

? ? 安裝好了之后,可以在CMD或者Shell中通過faker命令來調試,具體如下:

? ??faker [-h] [--version] [-o output] [-l {bg_BG,cs_CZ,...,zh_CN,zh_TW}] [-r REPEAT] [-s SEP] [-i {package.containing.custom_provider otherpkg.containing.custom_provider}] [fake] [fake argument [fake argument ...]]

參數說明:

? ? ? ? ?faker:是安裝在您的環境時,腳本,在發展中可以使用,而不是python? -m faker

? ??????-h,--help:顯示幫助消息

? ??????--version:顯示程序的版本號

? ??????-o FILENAME:重定向輸出到指定的文件名

? ??????-l {bg_BG,cs_CZ,...,zh_CN,zh_TW}:允許使用本地化的供應商

????? ??-r REPEAT:將生成的輸出的特定數量的

? ??????-s SEP:將生成的每個產生的輸出后的指定的分隔

? ??????-i {my.custom_provider other.custom_provider}:使用其他自定義供應商名單。請注意,是包含您提供一流的,而不是定制的Provider類本身包的導入路徑。

? ??????fake:是產生一個輸出,該假的名稱,如 name,address或text

? ??????[fake argument ...]:可選參數傳遞到假(例如,簡檔假取的逗號分隔的字段名作為第一個參數的可選列表)

faker命令

3.2、在Python中使用

????引用包:

????????from faker import Faker

????初始化:

????????f=Faker(locale='zh_CN')

????關于初始化參數locale:為生成數據的文化選項,默認為en_US,只有使用了相關文化,才能生成相對應的隨機信息(比如:名字,地址,郵編,城市,省份等)

可選擇的文化信息:

ar_EG?- Arabic (Egypt)? ? ? ? 阿拉伯語 - 埃及

ar_PS?- Arabic (Palestine)????阿拉伯語 - 巴勒斯坦

ar_SA?- Arabic (Saudi Arabia)????阿拉伯語 - 沙特阿拉伯

bg_BG?- Bulgarian? ? ? ? 保加利亞語 - 保加利亞

cs_CZ?- Czech? ? ? ? ? ? ? ?捷克語 - 捷克

de_DE?- German? ? ? ? ? ? 德語 - 德國

dk_DK?- Danish? ? ? ? ? ? 丹麥語 - 丹麥

el_GR?- Greek? ? ? ? ? ? 希臘語 - 希臘

en_AU?- English (Australia)? ? 英語 - 澳大利亞

en_CA?- English (Canada)? ? 英語 -? 加拿大

en_GB?- English (Great Britain)? ? 英語 - 英國

en_US?- English (United States)? ?英語 -? 美國

es_ES?- Spanish (Spain)? ? ? ? 西班牙語 - 西班牙

es_MX?- Spanish (Mexico)? ? ? ? 西班牙語- 墨西哥

et_EE?- Estonian? ? ? ? ? ? 愛沙尼亞語 - 愛沙尼亞

fa_IR?- Persian (Iran)? ? ? ? 波斯語 - 伊朗

fi_FI?- Finnish? ? ? ? 芬蘭語 - 芬蘭

fr_FR?- French? ? ? ? ?法語 - 法國

hi_IN?- Hindi? ? ? ? ? ? 印地語 - 印度

hr_HR?- Croatian? ? 克羅地亞語 - 克羅地亞

hu_HU?- Hungarian? ? 匈牙利語 - 匈牙利

hy_AM?- Armenian 亞美尼亞語 - 亞美尼亞

it_IT?- Italian? ? ? ?意大利語 -? 意大利

ja_JP?- Japanese? ? 日語 - 日本

ko_KR?- Korean? ? 朝鮮語 - 韓國

ka_GE?- Georgian (Georgia)? 格魯吉亞語 - 格魯吉亞

lt_LT?- Lithuanian? ? 立陶宛語 - 立陶宛

lv_LV?- Latvian????拉脫維亞語 - 拉脫維亞

ne_NP?- Nepali????尼泊爾語 - 尼泊爾

nl_NL?- Dutch (Netherlands)? ? 德語 - 荷蘭

no_NO?- Norwegian? ? 挪威語 - 挪威

pl_PL?- Polish? ? 波蘭語 - 波蘭

pt_BR?- Portuguese (Brazil)? ? 葡萄牙語? - 巴西

pt_PT?- Portuguese (Portugal)? ? 葡萄牙語 - 葡萄牙

ru_RU?- Russian? ? 俄語 - 俄國

sl_SI?- Slovene? ?斯諾文尼亞語 - 斯諾文尼亞

sv_SE?- Swedish? ? 瑞典語 - 瑞典?

tr_TR?- Turkish? ? ? ? ?土耳其語 - 土耳其

uk_UA?- Ukrainian? ? 烏克蘭語 - 烏克蘭

zh_CN?- Chinese (China)? ? (簡體中文)

zh_TW?- Chinese (Taiwan)? (繁體中文)

然后即可使用系統提供的方法:

f.name()? #生成姓名

f.address() #生成地址

一段簡單的測試代碼

4.常用方法一覽

? ??以下內容以ZH-CN和ZH-TW包為準

4.1.地理信息類

city_suffix():市,縣

country():國家

country_code():國家編碼

district():區

geo_coordinate():地理坐標

latitude():地理坐標(緯度)

longitude():地理坐標(經度)

postcode():郵編

province():省份 (zh_TW沒有此方法)

address():詳細地址

street_address():街道地址

street_name():街道名

street_suffix():街、路

4.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()

first_name_female():女性名

first_name_male():男性名

first_romanized_name():羅馬名

last_name()

last_name_female():女姓

last_name_male():男姓

last_romanized_name()

name():隨機生成全名

name_female():男性全名

name_male():女性全名

romanized_name():羅馬名

msisdn():移動臺國際用戶識別碼,即移動用戶的ISDN號碼

phone_number():隨機生成手機號

phonenumber_prefix():隨機生成手機號段

4.3、計算機基礎、Internet信息類

? ??4.3.1、個人賬戶信息類

ascii_company_email():隨機ASCII公司郵箱名

ascii_email():隨機ASCII郵箱

ascii_free_email()

ascii_safe_email()

company_email()

email()

free_email()

free_email_domain()

safe_email():安全郵箱

? ??4.3.2、網絡基礎信息類

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地址


? ??4.3.3、瀏覽器信息類

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信息

隨機生成的user_agent

? ??4.3.4、文件信息類

file_extension():隨機文件擴展名

file_name():隨機文件名(包含擴展名,不包含路徑)

file_path():隨機文件路徑(包含文件名,擴展名)

mime_type():隨機mime Type

4.4、數字類

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參數)


4.5.文本、加密類

pystr():隨機字符串

random_element():隨機字母

random_letter():隨機字母

paragraph():隨機生成一個段落

paragraphs():隨機生成多個段落,通過參數nb來控制段落數,返回數組

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


4.6.時間信息類

am_pm():AM/PM

century():隨機世紀

date():隨機日期

date_between():隨機生成指定范圍內日期,參數:start_date,end_date取值:具體日期或者today,-30d,-30y類似

date_between_dates():隨機生成指定范圍內日期,用法同上

date_object():隨機生產從1970-1-1到指定日期的隨機日期。

date_this_month()

date_this_year()

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():隨機時區

unix_time():隨機Unix時間

year():隨機年份

4.7、集合信息類

profile():隨機生成檔案信息

simple_profile():隨機生成簡單檔案信息

檔案信息和簡檔信息


#以下方法皆為隨機集合類型

pyiterable()

pylist()

pyset()

pystruct()

pytuple()

pydict()


4.8、其他類別

currency_code():貨幣編碼

color_name():隨機顏色名

hex_color():隨機HEX顏色

rgb_color():隨機RGB顏色

safe_color_name():隨機安全色名

safe_hex_color():隨機安全HEX顏色

isbn10():隨機ISBN(10位)

isbn13():隨機ISBN(13位)

lexify():替換所有問號(“?”)帶有隨機字母的事件。


5.使用中遇到的問題

? ?元旦前發布的這篇文章,由于工作需要,元旦期間創建偽數據的過程中,發現一個很有意思的問題。不同的文化類之間,方法是偶然有區別的。

? ?比如,在中文(zh_CN)中的方法,district()#獲取區? ?province()#獲取省的方法,在有些包里是沒有的,這需要根據所使用文化類的國家特制來。

日文包沒有province方法

? 比如,中國的一級行政單位,是省,直轄市,自治區;而日本的一級行政單位,是都、道、府、縣。所以,日文包(ja_JP)中,就沒有相應的province(),district(),取而代之的是prefecture(),town();在美國,一級行政單位又是洲,所以,在美國英語包(en_US)中,取而代之的是state();

? ?總之,在使用不同Fake類之前,最好對所生成文化的國家、地區信息做初步的了解,建議先瀏覽其對應的類文件的成員。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,836評論 18 139
  • 我們在開發中常常需要利用一些假數據來做測試,這種時候就可以使用 Faker 來偽造數據從而用來測試. Faker ...
    hjqjk閱讀 19,557評論 1 18
  • 常用方法 name() 生成隨機名字 random_int() 整數random_digit() 0-9 的隨機數...
    Zeno00閱讀 1,831評論 0 1
  • https://github.com/fzaninotto/FakerSkip to contentThis re...
    地獄咆哮Zzzzz閱讀 6,333評論 1 0
  • 小時候,如果擁有一件毛衣,就是擁有一件奢侈品,一定是如獲至寶,幸喜萬分。從小我就想,哪一天我也會有自己的毛衣。并且...
    李小宛閱讀 681評論 7 6