????在軟件需求、開發(fā)、測試過程中蝇棉,有時(shí)候需要使用一些測試數(shù)據(jù)俐末,針對(duì)這種情況,我們一般要么使用已有的系統(tǒng)數(shù)據(jù)庄蹋,要么需要手動(dòng)制造一些數(shù)據(jù)返顺。
? ? 由于現(xiàn)在的業(yè)務(wù)系統(tǒng)數(shù)據(jù)多種多樣,千變?nèi)f化蔓肯。在手動(dòng)制造數(shù)據(jù)的過程中遂鹊,可能需要花費(fèi)大量精力和工作量,此項(xiàng)工作既繁復(fù)又容易出錯(cuò)蔗包,而且秉扑,部分?jǐn)?shù)據(jù)的手造工作無法保障:比如UUID類數(shù)據(jù)、MD5调限、SHA加密類數(shù)據(jù)等舟陆。
????現(xiàn)在好了,有一個(gè)Python包能夠協(xié)助你完成這方面的工作耻矮。
1.什么是Faker
????Faker是一個(gè)Python包秦躯,開源的GITHUB項(xiàng)目,主要用來創(chuàng)建偽數(shù)據(jù)裆装,使用Faker包踱承,無需再手動(dòng)生成或者手寫隨機(jī)數(shù)來生成數(shù)據(jù),只需要調(diào)用Faker提供的方法哨免,即可完成數(shù)據(jù)的生成茎活。
????項(xiàng)目地址:https://github.com/joke2k/faker
2.安裝Faker
? ??方法一:
????????pip install faker
? ??方法二:
????????通過上方提供的github地址,來下載編譯安裝琢唾。
3.Faker的使用
3.1载荔、Faker命令
(該段落參考自:MA木易YA? 的相關(guān)簡書文章)
? ? 安裝好了之后,可以在CMD或者Shell中通過faker命令來調(diào)試采桃,具體如下:
? ??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 ...]]
參數(shù)說明:
? ? ? ? ?faker:是安裝在您的環(huán)境時(shí)懒熙,腳本丘损,在發(fā)展中可以使用,而不是python? -m faker
? ??????-h工扎,--help:顯示幫助消息
? ??????--version:顯示程序的版本號(hào)
? ??????-o FILENAME:重定向輸出到指定的文件名
? ??????-l {bg_BG,cs_CZ,...,zh_CN,zh_TW}:允許使用本地化的供應(yīng)商
????? ??-r REPEAT:將生成的輸出的特定數(shù)量的
? ??????-s SEP:將生成的每個(gè)產(chǎn)生的輸出后的指定的分隔
? ??????-i {my.custom_provider other.custom_provider}:使用其他自定義供應(yīng)商名單号俐。請(qǐng)注意,是包含您提供一流的定庵,而不是定制的Provider類本身包的導(dǎo)入路徑吏饿。
? ??????fake:是產(chǎn)生一個(gè)輸出,該假的名稱蔬浙,如 name猪落,address或text
? ??????[fake argument ...]:可選參數(shù)傳遞到假(例如,簡檔假取的逗號(hào)分隔的字段名作為第一個(gè)參數(shù)的可選列表)
3.2畴博、在Python中使用
????引用包:
????????from faker import Faker
????初始化:
????????f=Faker(locale='zh_CN')
????關(guān)于初始化參數(shù)locale:為生成數(shù)據(jù)的文化選項(xiàng)笨忌,默認(rèn)為en_US,只有使用了相關(guān)文化俱病,才能生成相對(duì)應(yīng)的隨機(jī)信息(比如:名字官疲,地址,郵編亮隙,城市途凫,省份等)
可選擇的文化信息:
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)? (繁體中文)
然后即可使用系統(tǒng)提供的方法:
f.name()? #生成姓名
f.address() #生成地址
4.常用方法一覽
? ??以下內(nèi)容以ZH-CN和ZH-TW包為準(zhǔn)
4.1.地理信息類
city_suffix():市,縣
country():國家
country_code():國家編碼
district():區(qū)
geo_coordinate():地理坐標(biāo)
latitude():地理坐標(biāo)(緯度)
longitude():地理坐標(biāo)(經(jīng)度)
postcode():郵編
province():省份 (zh_TW沒有此方法)
address():詳細(xì)地址
street_address():街道地址
street_name():街道名
street_suffix():街溢吻、路
4.2维费、基礎(chǔ)信息類
ssn():生成身份證號(hào)
bs():隨機(jī)公司服務(wù)名
company():隨機(jī)公司名(長)
company_prefix():隨機(jī)公司名(短)
company_suffix():公司性質(zhì)
credit_card_expire():隨機(jī)信用卡到期日
credit_card_full():生成完整信用卡信息
credit_card_number():信用卡號(hào)
credit_card_provider():信用卡類型
credit_card_security_code():信用卡安全碼
job():隨機(jī)職位
first_name():
first_name_female():女性名
first_name_male():男性名
first_romanized_name():羅馬名
last_name():
last_name_female():女姓
last_name_male():男姓
last_romanized_name():
name():隨機(jī)生成全名
name_female():男性全名
name_male():女性全名
romanized_name():羅馬名
msisdn():移動(dòng)臺(tái)國際用戶識(shí)別碼,即移動(dòng)用戶的ISDN號(hào)碼
phone_number():隨機(jī)生成手機(jī)號(hào)
phonenumber_prefix():隨機(jī)生成手機(jī)號(hào)段
4.3促王、計(jì)算機(jī)基礎(chǔ)犀盟、Internet信息類
? ??4.3.1、個(gè)人賬戶信息類
ascii_company_email():隨機(jī)ASCII公司郵箱名
ascii_email():隨機(jī)ASCII郵箱
ascii_free_email():
ascii_safe_email():
company_email():
email():
free_email():
free_email_domain():
safe_email():安全郵箱
? ??4.3.2蝇狼、網(wǎng)絡(luò)基礎(chǔ)信息類
domain_name():生成域名
domain_word():域詞(即阅畴,不包含后綴)
ipv4():隨機(jī)IP4地址
ipv6():隨機(jī)IP6地址
mac_address():隨機(jī)MAC地址
tld():網(wǎng)址域名后綴(.com,.net.cn,等等,不包括.)
uri():隨機(jī)URI地址
uri_extension():網(wǎng)址文件后綴
uri_page():網(wǎng)址文件(不包含后綴)
uri_path():網(wǎng)址文件路徑(不包含文件名)
url():隨機(jī)URL地址
user_name():隨機(jī)用戶名
image_url():隨機(jī)URL地址
? ??4.3.3迅耘、瀏覽器信息類
chrome():隨機(jī)生成Chrome的瀏覽器user_agent信息
firefox():隨機(jī)生成FireFox的瀏覽器user_agent信息
internet_explorer():隨機(jī)生成IE的瀏覽器user_agent信息
opera():隨機(jī)生成Opera的瀏覽器user_agent信息
safari():隨機(jī)生成Safari的瀏覽器user_agent信息
linux_platform_token():隨機(jī)Linux信息
user_agent():隨機(jī)user_agent信息
? ??4.3.4贱枣、文件信息類
file_extension():隨機(jī)文件擴(kuò)展名
file_name():隨機(jī)文件名(包含擴(kuò)展名,不包含路徑)
file_path():隨機(jī)文件路徑(包含文件名豹障,擴(kuò)展名)
mime_type():隨機(jī)mime Type
4.4冯事、數(shù)字類
numerify():三位隨機(jī)數(shù)字
random_digit():0~9隨機(jī)數(shù)
random_digit_not_null():1~9的隨機(jī)數(shù)
random_int():隨機(jī)數(shù)字,默認(rèn)0~9999血公,可以通過設(shè)置min,max來設(shè)置
random_number():隨機(jī)數(shù)字,參數(shù)digits設(shè)置生成的數(shù)字位數(shù)
pyfloat():left_digits=5 #生成的整數(shù)位數(shù),
? ? ? ? ? ? ? ? ? right_digits=2 #生成的小數(shù)位數(shù),
? ? ? ? ? ? ? ? ? positive=True #是否只有正數(shù)
pyint():隨機(jī)Int數(shù)字(參考random_int()參數(shù))
pydecimal():隨機(jī)Decimal數(shù)字(參考pyfloat參數(shù))
4.5.文本缓熟、加密類
pystr():隨機(jī)字符串
random_element():隨機(jī)字母
random_letter():隨機(jī)字母
paragraph():隨機(jī)生成一個(gè)段落
paragraphs():隨機(jī)生成多個(gè)段落累魔,通過參數(shù)nb來控制段落數(shù)摔笤,返回?cái)?shù)組
sentence():隨機(jī)生成一句話
sentences():隨機(jī)生成多句話,與段落類似
text():隨機(jī)生成一篇文章(不要幻想著人工智能了垦写,至今沒完全看懂一句話是什么意思)
word():隨機(jī)生成詞語
words():隨機(jī)生成多個(gè)詞語吕世,用法與段落,句子梯投,類似
binary():隨機(jī)生成二進(jìn)制編碼
boolean():True/False
language_code():隨機(jī)生成兩位語言編碼
locale():隨機(jī)生成語言/國際 信息
md5():隨機(jī)生成MD5
null_boolean():NULL/True/False
password():隨機(jī)生成密碼,可選參數(shù):length:密碼長度命辖;special_chars:是否能使用特殊字符;digits:是否包含數(shù)字分蓖;upper_case:是否包含大寫字母尔艇;lower_case:是否包含小寫字母
sha1():隨機(jī)SHA1
sha256():隨機(jī)SHA256
uuid4():隨機(jī)UUID
4.6.時(shí)間信息類
am_pm():AM/PM
century():隨機(jī)世紀(jì)
date():隨機(jī)日期
date_between():隨機(jī)生成指定范圍內(nèi)日期,參數(shù):start_date么鹤,end_date取值:具體日期或者today,-30d,-30y類似
date_between_dates():隨機(jī)生成指定范圍內(nèi)日期终娃,用法同上
date_object():隨機(jī)生產(chǎn)從1970-1-1到指定日期的隨機(jī)日期。
date_this_month():
date_this_year():
date_time():隨機(jī)生成指定時(shí)間(1970年1月1日至今)
date_time_ad():生成公元1年到現(xiàn)在的隨機(jī)時(shí)間
date_time_between():用法同dates
future_date():未來日期
future_datetime():未來時(shí)間
month():隨機(jī)月份
month_name():隨機(jī)月份(英文)
past_date():隨機(jī)生成已經(jīng)過去的日期
past_datetime():隨機(jī)生成已經(jīng)過去的時(shí)間
time():隨機(jī)24小時(shí)時(shí)間
timedelta():隨機(jī)獲取時(shí)間差
time_object():隨機(jī)24小時(shí)時(shí)間蒸甜,time對(duì)象
time_series():隨機(jī)TimeSeries對(duì)象
timezone():隨機(jī)時(shí)區(qū)
unix_time():隨機(jī)Unix時(shí)間
year():隨機(jī)年份
4.7棠耕、集合信息類
profile():隨機(jī)生成檔案信息
simple_profile():隨機(jī)生成簡單檔案信息
#以下方法皆為隨機(jī)集合類型
pyiterable()
pylist()
pyset()
pystruct()
pytuple()
pydict()
4.8、其他類別
currency_code():貨幣編碼
color_name():隨機(jī)顏色名
hex_color():隨機(jī)HEX顏色
rgb_color():隨機(jī)RGB顏色
safe_color_name():隨機(jī)安全色名
safe_hex_color():隨機(jī)安全HEX顏色
isbn10():隨機(jī)ISBN(10位)
isbn13():隨機(jī)ISBN(13位)
lexify():替換所有問號(hào)(“柠新?”)帶有隨機(jī)字母的事件窍荧。
5.使用中遇到的問題
? ?元旦前發(fā)布的這篇文章,由于工作需要恨憎,元旦期間創(chuàng)建偽數(shù)據(jù)的過程中搅荞,發(fā)現(xiàn)一個(gè)很有意思的問題。不同的文化類之間框咙,方法是偶然有區(qū)別的咕痛。
? ?比如,在中文(zh_CN)中的方法喇嘱,district()#獲取區(qū)? ?province()#獲取省的方法茉贡,在有些包里是沒有的,這需要根據(jù)所使用文化類的國家特制來者铜。
? 比如腔丧,中國的一級(jí)行政單位,是省作烟,直轄市愉粤,自治區(qū);而日本的一級(jí)行政單位拿撩,是都衣厘、道、府、縣影暴。所以错邦,日文包(ja_JP)中,就沒有相應(yīng)的province(),district(),取而代之的是prefecture(),town()型宙;在美國撬呢,一級(jí)行政單位又是洲,所以妆兑,在美國英語包(en_US)中魂拦,取而代之的是state();
? ?總之搁嗓,在使用不同F(xiàn)ake類之前芯勘,最好對(duì)所生成文化的國家、地區(qū)信息做初步的了解谱姓,建議先瀏覽其對(duì)應(yīng)的類文件的成員借尿。