????在軟件需求、開發、測試過程中,有時候需要使用一些測試數據,針對這種情況,我們一般要么使用已有的系統數據,要么需要手動制造一些數據。
? ? 由于現在的業務系統數據多種多樣,千變萬化。在手動制造數據的過程中,可能需要花費大量精力和工作量,此項工作既繁復又容易出錯,而且,部分數據的手造工作無法保障:比如UUID類數據、MD5、SHA加密類數據等。
????現在好了,有一個Python包能夠協助你完成這方面的工作。
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 ...]:可選參數傳遞到假(例如,簡檔假取的逗號分隔的字段名作為第一個參數的可選列表)
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信息
? ??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()#獲取省的方法,在有些包里是沒有的,這需要根據所使用文化類的國家特制來。
? 比如,中國的一級行政單位,是省,直轄市,自治區;而日本的一級行政單位,是都、道、府、縣。所以,日文包(ja_JP)中,就沒有相應的province(),district(),取而代之的是prefecture(),town();在美國,一級行政單位又是洲,所以,在美國英語包(en_US)中,取而代之的是state();
? ?總之,在使用不同Fake類之前,最好對所生成文化的國家、地區信息做初步的了解,建議先瀏覽其對應的類文件的成員。