1. 程式人生 > 實用技巧 >faker:造假專業戶,生成以假亂真的假資料

faker:造假專業戶,生成以假亂真的假資料

楔子

我們平時在做測試的時候,經常會使用一些假資料,而Python中有一個包叫faker(不是打LOL的那個),專門用來生成假資料,並且生成的假資料非常逼真,下面我們就來看一下。

faker使用方法

基本使用

faker使用起來非常簡單,我們看一下就知道了。

from faker import Faker

# 匯入Faker這個類, 例項化即可
fake = Faker(locale="zh_CN")

# 然後呼叫裡面的方法即可生成相應的假資料
print(fake.name())  # 謝秀華
print(fake.address())  # 四川省莉縣白雲瀋陽路o座 313522

看起來還挺逼真的,但是有一點需要注意,這裡的地址並不是真實的地址,而是隨機組合出來的,也就是將省、市、道路之類的隨機組合在一起。

另外我們在例項化Faker這個類的時候,指定了locale="zh_CN",表示生成中文資料,因為預設是英文資料。faker可以生成多個語言的假資料,支援的語言如下:

  • 簡體中文:zh_CN
  • 繁體中文:zh_TW
  • 美國英文:en_US
  • 英國英文:en_GB
  • 德文:de_DE
  • 日文:ja_JP
  • 韓文:ko_KR
  • 法文:fr_FR

我們舉個栗子:

from faker import Faker

fake = Faker(locale="ja_JP")

# 指定為日本
print(fake.name())  # 渚 あすか
print(fake.address())  # 栃木県西多摩郡奧多摩町花川戸41丁目7番10號 コート中宮祠994

# 指定為臺灣
fake = Faker(locale="zh_TW")
print(fake.name())   # 趙美琪
print(fake.address())  # 23149 新營頂福州巷3段653號3樓

除了上面的name和address,faker還支援生成很多其它的資料。

地理資訊類

from faker import Faker

fake = Faker(locale="zh_CN")

# 1. 隨機列印一個國家, 此時跟Faker裡面locale無關
print(fake.country())  # 吉布提

# 2. 國家編碼, 此時跟Faker裡面locale無關
print(fake.country_code())  # KW

# 3. 列印區, 此時是中國的區
print(fake.district())  # 朝陽

# 4. 列印緯度
print(fake.latitude())  # -39.076213

# 5. 列印經度
print(fake.longitude())  # 138.988316

# 6. 列印郵編
print(fake.postcode())  # 881534

# 7. 列印省份
print(fake.province())  # 新疆維吾爾自治區

# 8. 列印詳細地址
print(fake.address())  # 河北省淑英縣豐都永安街D座 260864

# 9. 列印街道地址
print(fake.street_address())  # 姜街c座

# 10. 列印街道名
print(fake.street_name())  # 海門街

# 11. 獲取市、縣 (列印的是字尾, 要麼是縣、要麼是市)
print(fake.city_suffix())  # 市
print(fake.city_suffix())  # 縣

# 12. 列印街、路(列印的是字尾, 要麼是路、要麼是街)
print(fake.street_suffix())  # 路
print(fake.street_suffix())  # 街

基礎資訊類

from faker import Faker

fake = Faker(locale="zh_CN")

# 1. 生成身份證號
print(fake.ssn())  # 513428197105280989

# 2. 生成公司服務名
print(fake.country_code())  # HT

# 3. 隨機公司名(長)
print(fake.company())  # 創聯世紀科技有限公司

# 4. 隨機公司名(短)
print(fake.company_prefix())  # 信誠致遠

# 5. 公司性質
print(fake.company_suffix())  # 資訊有限公司

# 6. 隨機信用卡到期日
print(fake.credit_card_expire())  # 03/28

# 7. 生成完整信用卡資訊
print(fake.credit_card_full())
"""
xx JCB 16 digit
勇 趙
3505427828999283 12/22
CVC: 463

"""

# 8. 信用卡號
print(fake.credit_card_number())  # 44980244740048

# 9. 信用卡型別
print(fake.credit_card_provider())  # Mastercard

# 10. 信用卡安全碼
print(fake.credit_card_security_code())  # 581

# 11. 隨機職位
print(fake.job())  # 新媒體運營

# 12. 女性的名
print(fake.first_name_female())  # 麗娟

# 13. 男性的名
print(fake.first_name_male())  # 彬

# 14. 女性的姓和男性的姓, 這裡的姓和上面的名組合起來得到一個完整的姓名
# 說實話個人覺得last_name_female列印姓有點彆扭, 可能老外習慣將姓寫在後、名字也在前
# 另外,關於姓,個人覺得其實男女沒有太大區別
print(fake.last_name_female())  # 高
print(fake.last_name_male())  # 楊

# 15. 列印全名
print(fake.name())  # 田小紅

# 16. 男性全名
print(fake.name_male())  # 朱燕

# 17. 女性全名
print(fake.name_female())  # 王凱

# 18. 隨機生成手機號
print(fake.phone_number())  # 18035736881

# 19. 隨機生成手機號段
print(fake.phonenumber_prefix())  # 147

計算機基礎、Internet資訊類

from faker import Faker

fake = Faker(locale="zh_CN")

# 1. 隨機ASCII公司郵箱名
print(fake.ascii_company_email())  # [email protected]

# 2. 隨機ASCII郵箱
print(fake.ascii_email())  # [email protected]

# 3. 公司郵箱
print(fake.company_email())  # [email protected]

# 4. 郵箱
print(fake.email())  # [email protected]

# 5. 安全郵箱
print(fake.safe_email())  # [email protected]

網路基礎資訊類

from faker import Faker

fake = Faker(locale="zh_CN")

# 1. 生成域名
print(fake.domain_name())  # lijuan.net

# 2. 域詞(即,不包含字尾)
print(fake.domain_word())  # weiyang

# 3. 隨機IP4地址
print(fake.ipv4())  # 12.16.224.95

# 4. 隨機IP6地址
print(fake.ipv6())  # e6b:5814:4d63:1496:9e0d:eb44:e114:722b

# 5. 隨機MAC地址
print(fake.mac_address())  # 8a:1c:ce:eb:f0:5c

# 6. 網址域名字尾(com, net, cn等等,不包括.)
print(fake.tld())  # cn

# 7. 隨機URI地址
print(fake.uri())  # https://na.cn/login/

# 8. 網址檔案字尾
print(fake.uri_extension())  # .htm

# 9. 網址檔案(不包含字尾)
print(fake.uri_page())  # homepage

# 10. 網址檔案路徑(不包含檔名)
print(fake.uri_path())  # categories

# 11. 隨機URL地址
print(fake.url())  # https://jingsong.cn/

# 12. 隨機使用者名稱
print(fake.user_name())  # jing13

# 13. 隨機URL地址
print(fake.image_url())  # https://dummyimage.com/109x622

瀏覽器資訊類

from faker import Faker

fake = Faker(locale="zh_CN")

# 1. 隨機生成Chrome的瀏覽器user_agent資訊
print(fake.chrome()) 
# Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_7) AppleWebKit/535.0 (KHTML, like Gecko) Chrome/26.0.870.0 Safari/535.0

# 2. 隨機生成FireFox的瀏覽器user_agent資訊
print(fake.firefox()) 
# Mozilla/5.0 (Android 3.2.2; Mobile; rv:15.0) Gecko/15.0 Firefox/15.0

# 3. 隨機生成IE的瀏覽器user_agent資訊
print(fake.internet_explorer())
# Mozilla/5.0 (compatible; MSIE 8.0; Windows 98; Win 9x 4.90; Trident/3.1)

# 4. 隨機生成Opera的瀏覽器user_agent資訊
print(fake.opera())  
# Opera/9.47.(X11; Linux i686; cv-RU) Presto/2.9.186 Version/11.00

# 5. 隨機生成Safari的瀏覽器user_agent資訊
print(fake.safari())  
"""
Mozilla/5.0 (iPod; U; CPU iPhone OS 4_2 like Mac OS X; ne-NP) 
AppleWebKit/534.29.1 (KHTML, like Gecko) Version/3.0.5 Mobile/8B119 Safari/6534.29.1
"""

# 6. 隨機Linux資訊
print(fake.linux_platform_token())  # X11; Linux x86_64

# 7. 隨機user_agent資訊
print(fake.user_agent())  
# Mozilla/5.0 (Windows NT 5.0; si-LK; rv:1.9.1.20) Gecko/2017-09-23 19:50:28 Firefox/3.8

數字類

這個意義不大,完全可以使用Python的內建模組,或者numpy來實現,這裡不說了。

文字、加密類

from faker import Faker

fake = Faker(locale="zh_CN")

# 1. 隨機字串
print(fake.pystr())  # nyfOoBhwiCAYECiKOULE

# 2. 隨機字母
print(fake.random_element())  # c

# 3. 隨機字母
print(fake.random_letter())  # A

# 4. 隨機生成一個段落
print(fake.paragraph())  # 產品特別為了文章.研究不同評論就是還是工程.

# 5. 隨機生成多個段落
print(fake.paragraphs())
"""
['一下手機希望責任.合作空間聯絡最大.', 
'使用者免費中心部分就是如何男人.次數美國自己影響程式服務.你的類別歡迎日本是一.', 
'資料情況工作一起發展應該自己.發展資源內容.']
"""

# 6. 隨機生成一句話
print(fake.sentence())  # 更新法律學生應用.

# 7. 隨機生成多句話,與段落類似
print(fake.sentences())  # ['服務不過而且對於美國今天價格.', '釋出全國語言帖子.', '產品關係問題產品.']

# 8. 隨機生成一篇文章
print(fake.text())
"""
這是價格方法閱讀.釋出對於經濟地區開發相關你們合作.
一些更新個人學生重要.什麼威望網路影響.
市場這些環境閱讀那個類別.軟體男人怎麼等級狀態日本您的.
您的閱讀地方論壇.廣告幫助位置企業.以下應用執行主要當前只是.
簡介只要來自如果科技.那麼文化進入公司電話.
名稱威望遊戲報告最新日期論壇.最大為了如何提高大學.還是檔案因為喜歡語言.的是以及資料是否現在兩個.
"""

# 9. 隨機生成詞語
print(fake.word())  # 過程

# 10. 隨機生成多個詞語,用法與段落,句子,類似
print(fake.words())  # ['任何', '參加', '正在']

# 11. 隨機生成二進位制編碼
print(fake.binary())  # 非常長, 不列印了

# 12. 隨機生成兩位語言編碼
print(fake.language_code())  # ks

# 13. 隨機生成語言/國際 資訊
print(fake.locale())  # shs_CA

# 14. 隨機生成MD5
print(fake.md5())  # 0df0396328281f32b1922cd82016580d

# 15. 隨機生成密碼,可選引數:
# length:密碼長度;special_chars:是否能使用特殊字元;digits:是否包含數字;upper_case:是否包含大寫字母;lower_case:是否包含小寫字母
print(fake.password())  # C^!5fIk!s8

# 16. 隨機SHA1
print(fake.sha1())  # e7d9fa4f3e9a25e5ab44d88971e4c56ef4cc446f

# 17. 隨機SHA256
print(fake.sha256())  # 47f9163f2a72edc855ef25289c2cfcd4c213842607b4b936c12a43b477c8ed77

# 18. 隨機UUID
print(fake.uuid4())  # 45dc0754-b3e3-4c94-bdcb-d20a3a8f4d9d

時間資訊類

意義也不大,有興趣可以自己瞭解一下。

小結

個人覺得,faker這個庫最有用的就是生成名字和地址了,其實雖然可以生成很多資訊,但是常用的只有幾個,需要使用的時候直接查就可以了。