Python使用Faker庫(kù)實(shí)現(xiàn)數(shù)據(jù)生成的示例詳解
前言
老板說(shuō)要“假數(shù)據(jù)”,我真的慌了!
前幾天,老板突然甩給我一個(gè)需求:“咱們數(shù)據(jù)庫(kù)里數(shù)據(jù)太少,先搞點(diǎn)測(cè)試數(shù)據(jù)看看效果。”
我心想,這還不簡(jiǎn)單?隨便寫(xiě)個(gè)for循環(huán),random.randint()往里一丟,不就完事了?
結(jié)果老板補(bǔ)了一句:“要真實(shí)點(diǎn)的,比如姓名、地址、手機(jī)號(hào)、郵箱那種。”
這時(shí)候,我的大腦已經(jīng)在瘋狂計(jì)算:
- 姓名?我得找個(gè)姓氏 + 名字的列表拼接?
- 地址?手寫(xiě)全國(guó)地名?
- 手機(jī)號(hào)?光頭腦袋都要想禿了!
就在我以為要手動(dòng)編寫(xiě)一萬(wàn)個(gè)假數(shù)據(jù),熬夜到禿頭的時(shí)候,我發(fā)現(xiàn)了 Faker 這個(gè)神奇的庫(kù)。
朋友們,假數(shù)據(jù)生成,我們程序員才是專業(yè)的!
Faker:Python的“造假專家”
Faker 是 Python 里的一個(gè)第三方庫(kù),專門(mén)用來(lái) 生成假數(shù)據(jù)。不管你要姓名、手機(jī)號(hào)、郵箱,還是地址、公司名、銀行卡號(hào),它都能輕松生成!
你甚至可以用它生成一份“假簡(jiǎn)歷”,完美應(yīng)付“我有五年工作經(jīng)驗(yàn)”的尷尬問(wèn)題(當(dāng)然,咱們做人要誠(chéng)信,別真的造假哦)。
安裝 Faker
安裝Faker比安裝游戲還簡(jiǎn)單
用 pip 安裝它,簡(jiǎn)單到不行:
pip install faker
然后,在 Python 里試試看:
from faker import Faker fake = Faker() print(fake.name()) # 隨機(jī)生成一個(gè)名字 print(fake.address()) # 隨機(jī)生成一個(gè)地址 print(fake.email()) # 隨機(jī)生成一個(gè)郵箱
運(yùn)行結(jié)果可能是:
Michael Johnson
1234 Elm Street, Springfield, IL 62704
michael.johnson@example.com
怎么樣,效果還不錯(cuò)吧?這名字聽(tīng)著就像個(gè)正經(jīng)人
Faker的核心用法
Faker 的用法很簡(jiǎn)單,核心思路就是 創(chuàng)建一個(gè) Faker 實(shí)例,然后調(diào)用它的各種方法 生成不同類(lèi)型的數(shù)據(jù)。
1. 生成不同語(yǔ)言的假數(shù)據(jù)
默認(rèn)情況下,Faker 生成的是英文數(shù)據(jù),如果要生成中文數(shù)據(jù),可以加個(gè) "zh_CN":
from faker import Faker
fake = Faker("zh_CN")
print(fake.name()) # 隨機(jī)生成一個(gè)名字
print(fake.address()) # 隨機(jī)生成一個(gè)地址
print(fake.email()) # 隨機(jī)生成一個(gè)郵箱
運(yùn)行結(jié)果:
趙建軍
廣西壯族自治區(qū)琴市懷柔貴陽(yáng)路C座 684728
guiying80@example.com
Faker 支持 90+ 種語(yǔ)言 常見(jiàn)的 Faker 語(yǔ)言代碼如下:
| 語(yǔ)言 | 代碼 | 語(yǔ)言 | 代碼 |
|---|---|---|---|
| 中文(中國(guó)) | zh_CN | 英文(美國(guó)) | en_US |
| 英文(英國(guó)) | en_GB | 日語(yǔ) | ja_JP |
| 韓語(yǔ) | ko_KR | 法語(yǔ)(法國(guó)) | fr_FR |
| 德語(yǔ)(德國(guó)) | de_DE | 俄語(yǔ) | ru_RU |
| 西班牙語(yǔ)(西班牙) | es_ES | 意大利語(yǔ) | it_IT |
| 葡萄牙語(yǔ)(巴西) | pt_BR | 荷蘭語(yǔ) | nl_NL |
| 印度語(yǔ) | hi_IN | 阿拉伯語(yǔ) | ar_EG |
如果你想查看 Faker 完整的語(yǔ)言列表,可以運(yùn)行:
from faker.config import AVAILABLE_LOCALES print(AVAILABLE_LOCALES)
這樣就能看到所有 Faker 支持的語(yǔ)言代碼 了!
2. 批量生成 N 條假數(shù)據(jù)
如果你要一次生成 1000 條數(shù)據(jù),總不能手動(dòng)調(diào)用 1000 次吧?這時(shí)候,for 循環(huán)派上用場(chǎng)了!
for _ in range(5): # 生成5條數(shù)據(jù)
print(fake.name(), fake.email(), fake.job())
運(yùn)行結(jié)果:
王芳 wang.fang@example.com 軟件工程師
小強(qiáng) liqiang@example.com 數(shù)據(jù)分析師
張偉 zhangwei@example.com 網(wǎng)絡(luò)安全專家
劉娜 liuna@example.com 人力資源經(jīng)理
趙磊 zhaolei@example.com 產(chǎn)品經(jīng)理
如果你要生成 一整張表的數(shù)據(jù),比如導(dǎo)出到 Excel,那該怎么做呢?往下看
實(shí)戰(zhàn)1:生成測(cè)試數(shù)據(jù)并導(dǎo)出 Excel
假設(shè)我們要生成一份 1000 條用戶信息的 Excel 表,包含 姓名、郵箱、手機(jī)號(hào)、公司、職位。
這時(shí)候,我們可以用 Faker + pandas,輕松完成導(dǎo)出 Excel 的任務(wù)!
代碼示例
import pandas as pd
from faker import Faker
fake = Faker("zh_CN")
# 生成 1000 條假數(shù)據(jù)
data = []
for _ in range(1000):
data.append([
fake.name(),
fake.email(),
fake.phone_number(),
fake.company(),
fake.job()
])
# 用 pandas 創(chuàng)建 DataFrame
df = pd.DataFrame(data, columns=["姓名", "郵箱", "手機(jī)號(hào)", "公司", "職位"])
# 保存到 Excel
df.to_excel("fake_users.xlsx", index=False)
print("Excel 生成完畢,快去看看吧!??")
代碼解讀:
- 用
fake.name()生成中文姓名 - 用
fake.email()生成郵箱 - 用
fake.phone_number()生成手機(jī)號(hào) - 用
fake.company()生成公司名 - 用
fake.job()生成職位 - 最后用 pandas 存入 Excel,這樣就可以輕松導(dǎo)出一份假數(shù)據(jù)表格!
實(shí)戰(zhàn)2:模擬 API 接口返回的數(shù)據(jù)
如果你想用 Faker 生成 模擬 API 接口返回的數(shù)據(jù),可以使用 json 或 dict 結(jié)構(gòu),然后格式化輸出。下面介紹幾種常見(jiàn)的方法:
方法 1:簡(jiǎn)單接口數(shù)據(jù)(JSON 格式)
import json
from faker import Faker
fake = Faker("zh_CN") # 生成中文數(shù)據(jù)
# 生成一條用戶數(shù)據(jù)
data = {
"user_id": fake.uuid4(),
"name": fake.name(),
"email": fake.email(),
"phone": fake.phone_number(),
"address": fake.address(),
"company": fake.company(),
"job": fake.job(),
"created_at": fake.date_time_this_year().isoformat(),
}
# 轉(zhuǎn)換成 JSON 格式輸出
print(json.dumps(data, indent=4, ensure_ascii=False))
示例輸出(JSON 數(shù)據(jù)):
{
"user_id": "f0da2b7b-1159-4f90-800c-6ed59be66523",
"name": "黃海燕",
"email": "yqiao@example.org",
"phone": "13648640903",
"address": "青海省楊縣龍?zhí)豆枮I街R座 713788",
"company": "恒聰百匯傳媒有限公司",
"job": "煉膠工",
"created_at": "2025-01-19T22:03:55"
}
方法 2:批量生成接口數(shù)據(jù)
如果需要 一次性生成多條數(shù)據(jù)(比如 10 個(gè)用戶),可以用 列表解析 生成 JSON 數(shù)組:
data_list = [
{
"user_id": fake.uuid4(),
"name": fake.name(),
"email": fake.email(),
"phone": fake.phone_number(),
"company": fake.company(),
"job": fake.job(),
"created_at": fake.date_time_this_year().isoformat(),
}
for _ in range(10) # 生成 10 條數(shù)據(jù)
]
# 轉(zhuǎn)換成 JSON 格式輸出
print(json.dumps(data_list, indent=4, ensure_ascii=False))
示例輸出(JSON 數(shù)組):
[
{
"user_id": "ac9c9caa-2134-437e-beb6-ebc334d90ae1",
"name": "蘇建國(guó)",
"email": "maqiang@example.org",
"phone": "15895021634",
"company": "天開(kāi)傳媒有限公司",
"job": "管家部經(jīng)理/主管",
"created_at": "2025-03-06T05:23:05"
},
{
"user_id": "6525642b-d7e5-4299-a3d9-1cee60cbfd4c",
"name": "馮晶",
"email": "li54@example.com",
"phone": "13896607243",
"company": "九方科技有限公司",
"job": "區(qū)域銷(xiāo)售經(jīng)理",
"created_at": "2025-03-27T05:20:20"
},
…… 此處省略8條數(shù)據(jù)
]
方法 3:使用 Flask 搭建一個(gè) Mock API
如果你想讓前端可以直接訪問(wèn) http://127.0.0.1:5000/api/users 來(lái)獲取假數(shù)據(jù),可以結(jié)合 Flask 搭建一個(gè)本地 API 接口:
from flask import Flask, jsonify
from faker import Faker
app = Flask(__name__)
fake = Faker("zh_CN")
# 定義一個(gè) API 端點(diǎn)
@app.route("/api/users", methods=["GET"])
def get_users():
users = [
{
"user_id": fake.uuid4(),
"name": fake.name(),
"email": fake.email(),
"phone": fake.phone_number(),
"company": fake.company(),
"job": fake.job(),
"created_at": fake.date_time_this_year().isoformat(),
}
for _ in range(2) # 生成 2 條數(shù)據(jù)
]
return jsonify(users)
if __name__ == "__main__":
app.run(debug=True)
運(yùn)行后,訪問(wèn):
http://127.0.0.1:5000/api/users
返回 JSON 響應(yīng)

這樣,你就有了一個(gè)可以模擬 API 接口的本地服務(wù)適用于前端調(diào)用、測(cè)試 API 數(shù)據(jù)。
容易被忽略的 Faker 小技巧
1. Faker 還能生成信用卡、IP 地址!
print(fake.ssn()) # 生成隨機(jī)身份證號(hào) print(fake.credit_card_number()) # 生成信用卡號(hào) print(fake.ipv4()) # 生成 IPv4 地址
2. Faker可以模擬哪些數(shù)據(jù)
如果你想查看 Faker 可以生成哪些類(lèi)型的數(shù)據(jù),可以使用以下方法:
from faker import Faker fake = Faker() print(dir(fake)) # 查看所有可用的方法
3. 讓假數(shù)據(jù)“可復(fù)現(xiàn)”
有時(shí)候,我們希望生成的假數(shù)據(jù) 每次都一樣(比如寫(xiě)測(cè)試用例時(shí))。這時(shí)候,可以用 seed() 方法:
fake.seed_instance(42) # 設(shè)置種子 print(fake.name()) # 這次和下次運(yùn)行都會(huì)是同一個(gè)名字
4. 生成定制格式的數(shù)據(jù)
你是不是以為 Faker 只能生成那些官方定義好的字段?其實(shí),它還能按 自定義格式 生成數(shù)據(jù)!
fake.seed_instance(42) # 設(shè)置種子 print(fake.name()) # 這次和下次運(yùn)行都會(huì)是同一個(gè)名字
5. 生成 “看起來(lái)更真實(shí)” 的數(shù)據(jù)
有時(shí)候,默認(rèn)的 name()、address() 生成的數(shù)據(jù)雖然隨機(jī),但不夠真實(shí)。你可以指定某些值更常見(jiàn)!
# 讓特定公司名更常見(jiàn) company_list = ["阿里巴巴", "騰訊", "華為", "百度", "字節(jié)跳動(dòng)"] print(fake.random_element(company_list)) # 隨機(jī)公司 # 指定某些姓氏更常見(jiàn) last_names = ["張", "王", "李", "趙", "劉"] print(fake.last_name() + fake.first_name()) # 更真實(shí)的姓名
6. 生成唯一 & 不重復(fù)數(shù)據(jù)
Faker 可能會(huì)生成重復(fù)的數(shù)據(jù)?不怕,我們有 unique 這個(gè)大招
print(fake.unique.email()) # 生成不重復(fù)的 email print(fake.unique.name()) # 生成不重復(fù)的姓名
fake.unique.xxx()讓 Faker 確保不會(huì)重復(fù)- 避免數(shù)據(jù)庫(kù)主鍵重復(fù),特別適合批量造數(shù)據(jù)
到此這篇關(guān)于Python使用Faker庫(kù)實(shí)現(xiàn)數(shù)據(jù)生成的示例詳解的文章就介紹到這了,更多相關(guān)Python Faker生成數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一文教你Python如何使用sqlparse玩轉(zhuǎn)SQL解析
sqlparse?是一個(gè)?Python?第三方庫(kù),專門(mén)用于解析和格式化?SQL?語(yǔ)句,它提供了強(qiáng)大的?SQL?解析功能,下面小編就來(lái)為大家詳細(xì)介紹一下它的具體使用吧2025-02-02
python實(shí)現(xiàn)21點(diǎn)小游戲
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)21點(diǎn)小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04
python實(shí)現(xiàn)數(shù)學(xué)模型(插值、擬合和微分方程)
這篇文章主要介紹了python實(shí)現(xiàn)數(shù)學(xué)模型(插值、擬合和微分方程),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
Python還能這么玩之用Python做個(gè)小游戲的外掛
玩過(guò)電腦游戲的同學(xué)對(duì)于外掛肯定不陌生,但是你在用外掛的時(shí)候有沒(méi)有想過(guò)外掛怎么制作出來(lái)的呢?現(xiàn)在來(lái)看一下怎么制作一個(gè)外掛,首先說(shuō)下,這里的游戲外掛的概念,和那些大型網(wǎng)游里的外掛可不同,不能自動(dòng)打怪,主要為了提高一下編程技術(shù),需要的朋友可以參考下2021-06-06
pyqt5 從本地選擇圖片 并顯示在label上的實(shí)例
今天小編就為大家分享一篇pyqt5 從本地選擇圖片 并顯示在label上的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06
Python qqbot 實(shí)現(xiàn)qq機(jī)器人的示例代碼
這篇文章主要介紹了Python qqbot 實(shí)現(xiàn)qq機(jī)器人的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
Python使用Selenium執(zhí)行JavaScript代碼的步驟詳解
Selenium是一個(gè)用于自動(dòng)化瀏覽器操作的工具,可以模擬人工操作,執(zhí)行各種瀏覽器操作,而JavaScript是一種常用的腳本語(yǔ)言,本文將介紹如何在Python中使用Selenium執(zhí)行JavaScript代碼,并給出一些常見(jiàn)的應(yīng)用示例2023-11-11

