Python也学会造假了?推荐一个神奇的库Faker

造假,Python是专业的 😎
老板说要"假数据",我真的慌了!
前几天,老板突然甩给我一个需求:"咱们数据库里数据太少,先搞点测试数据看看效果。"
我心想,这还不简单?随便写个for
循环,random.randint()
往里一丢,不就完事了?
结果老板补了一句:"要真实点的,比如姓名、地址、手机号、邮箱那种。"

这时候,我的大脑已经在疯狂计算:
- 姓名?我得找个姓氏 + 名字的列表拼接?
- 地址?手写全国地名?
- 手机号?光头脑袋都要想秃了!
就在我以为要手动编写一万个假数据,熬夜到秃头的时候,我发现了 Faker 这个神奇的库。
朋友们,假数据生成,我们程序员才是专业的! 🎉
Faker:Python的"造假专家"
Faker 是 Python 里的一个第三方库,专门用来 生成假数据。不管你要姓名、手机号、邮箱,还是地址、公司名、银行卡号,它都能轻松生成!
你甚至可以用它生成一份"假简历",完美应付"我有五年工作经验"的尴尬问题(当然,咱们做人要诚信,别真的造假哦😂)。
安装 Faker(比安装游戏还简单)
用 pip 安装它,简单到不行:
bash
pip install faker
然后,在 Python 里试试看:
python
from faker import Faker
fake = Faker()
print(fake.name()) # 随机生成一个名字
print(fake.address()) # 随机生成一个地址
print(fake.email()) # 随机生成一个邮箱
运行结果可能是:
plaintext
Michael Johnson
1234 Elm Street, Springfield, IL 62704
[email protected]
怎么样,效果还不错吧?这名字听着就像个正经人 🤣
Faker的核心用法
Faker 的用法很简单,核心思路就是 创建一个 Faker 实例,然后调用它的各种方法 生成不同类型的数据。
1. 生成不同语言的假数据
默认情况下,Faker
生成的是英文数据,如果要生成中文数据,可以加个 "zh_CN"
:
python
from faker import Faker
fake = Faker("zh_CN")
print(fake.name()) # 随机生成一个名字
print(fake.address()) # 随机生成一个地址
print(fake.email()) # 随机生成一个邮箱
plaintext
赵建军
广西壮族自治区琴市怀柔贵阳路C座 684728
[email protected]
Faker 支持 90+ 种语言 常见的 Faker 语言代码如下:
语言 | 代码 | 语言 | 代码 |
---|---|---|---|
中文(中国) | zh_CN |
英文(美国) | en_US |
英文(英国) | en_GB |
日语 | ja_JP |
韩语 | ko_KR |
法语(法国) | fr_FR |
德语(德国) | de_DE |
俄语 | ru_RU |
西班牙语(西班牙) | es_ES |
意大利语 | it_IT |
葡萄牙语(巴西) | pt_BR |
荷兰语 | nl_NL |
印度语 | hi_IN |
阿拉伯语 | ar_EG |
如果你想查看 Faker 完整的语言列表,可以运行:
python
from faker.config import AVAILABLE_LOCALES
print(AVAILABLE_LOCALES)
这样就能看到所有 Faker 支持的语言代码 了!
2. 批量生成 N 条假数据
如果你要一次生成 1000 条数据,总不能手动调用 1000 次吧?这时候,for 循环派上用场了!
python
for _ in range(5): # 生成5条数据
print(fake.name(), fake.email(), fake.job())
运行结果:
plaintext
王芳 [email protected] 软件工程师
李强 [email protected] 数据分析师
张伟 [email protected] 网络安全专家
刘娜 [email protected] 人力资源经理
赵磊 [email protected] 产品经理
如果你要生成 一整张表的数据,比如导出到 Excel,那该怎么做呢?往下看👇
实战1:生成测试数据并导出 Excel
假设我们要生成一份 1000 条用户信息的 Excel 表,包含 姓名、邮箱、手机号、公司、职位。
这时候,我们可以用 Faker + pandas,轻松完成导出 Excel 的任务!
代码示例
python
import pandas as pd
from faker import Faker
fake = Faker("zh_CN")
# 生成 1000 条假数据
data = []
for _ in range(1000):
data.append([
fake.name(),
fake.email(),
fake.phone_number(),
fake.company(),
fake.job()
])
# 用 pandas 创建 DataFrame
df = pd.DataFrame(data, columns=["姓名", "邮箱", "手机号", "公司", "职位"])
# 保存到 Excel
df.to_excel("fake_users.xlsx", index=False)
print("Excel 生成完毕,快去看看吧!🚀")
💡 代码解读:
- 用
fake.name()
生成中文姓名 - 用
fake.email()
生成邮箱 - 用
fake.phone_number()
生成手机号 - 用
fake.company()
生成公司名 - 用
fake.job()
生成职位 - 最后用 pandas 存入 Excel,这样就可以轻松导出一份假数据表格!
实战2:模拟 API 接口返回的数据
如果你想用 Faker 生成 模拟 API 接口返回的数据 ,可以使用 json
或 dict
结构,然后格式化输出。下面介绍几种常见的方法:
方法 1:简单接口数据(JSON 格式)
python
import json
from faker import Faker
fake = Faker("zh_CN") # 生成中文数据
# 生成一条用户数据
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(),
}
# 转换成 JSON 格式输出
print(json.dumps(data, indent=4, ensure_ascii=False))
示例输出(JSON 数据):
json
{
"user_id": "f0da2b7b-1159-4f90-800c-6ed59be66523",
"name": "黄海燕",
"email": "[email protected]",
"phone": "13648640903",
"address": "青海省杨县龙潭哈尔滨街R座 713788",
"company": "恒聪百汇传媒有限公司",
"job": "炼胶工",
"created_at": "2025-01-19T22:03:55"
}
方法 2:批量生成接口数据
如果需要 一次性生成多条数据 (比如 10 个用户),可以用 列表解析 生成 JSON 数组:
python
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 条数据
]
# 转换成 JSON 格式输出
print(json.dumps(data_list, indent=4, ensure_ascii=False))
示例输出(JSON 数组):
json
[
{
"user_id": "ac9c9caa-2134-437e-beb6-ebc334d90ae1",
"name": "苏建国",
"email": "[email protected]",
"phone": "15895021634",
"company": "天开传媒有限公司",
"job": "管家部经理/主管",
"created_at": "2025-03-06T05:23:05"
},
{
"user_id": "6525642b-d7e5-4299-a3d9-1cee60cbfd4c",
"name": "冯晶",
"email": "[email protected]",
"phone": "13896607243",
"company": "九方科技有限公司",
"job": "区域销售经理",
"created_at": "2025-03-27T05:20:20"
},
...... 此处省略8条数据
]
方法 3:使用 Flask 搭建一个 Mock API
如果你想让前端可以直接访问 http://127.0.0.1:5000/api/users 来获取假数据,可以结合 Flask
搭建一个本地 API 接口:
python
from flask import Flask, jsonify
from faker import Faker
app = Flask(__name__)
fake = Faker("zh_CN")
# 定义一个 API 端点
@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 条数据
]
return jsonify(users)
if __name__ == "__main__":
app.run(debug=True)
运行后,访问:
arduino
http://127.0.0.1:5000/api/users
返回 JSON 响应

这样,你就有了一个可以模拟 API 接口的本地服务 🚀 适用于前端调用、测试 API 数据。
容易被忽略的 Faker 小技巧
1. Faker 还能生成身份证号、信用卡、IP 地址!
python
print(fake.ssn()) # 生成随机身份证号
print(fake.credit_card_number()) # 生成信用卡号
print(fake.ipv4()) # 生成 IPv4 地址
2. Faker可以模拟哪些数据
如果你想查看 Faker 可以生成哪些类型的数据,可以使用以下方法:
python
from faker import Faker
fake = Faker()
print(dir(fake)) # 查看所有可用的方法
3. 让假数据"可复现"
有时候,我们希望生成的假数据 每次都一样 (比如写测试用例时)。这时候,可以用 seed()
方法:
python
fake.seed_instance(42) # 设置种子
print(fake.name()) # 这次和下次运行都会是同一个名字
4. 生成定制格式的数据
你是不是以为 Faker 只能生成那些官方定义好的字段?其实,它还能按 自定义格式 生成数据!
python
# 生成指定格式的手机号(以 138 开头)
print(fake.numerify("138#######")) # 138开头的手机号
# 生成固定格式的身份证号(随机后六位)
print(fake.numerify("11010119######11"))
# 生成随机订单号(前缀+随机数字)
print(fake.bothify("ORDER-####-????")) # "ORDER-4738-WJGD"
5. 生成 "看起来更真实" 的数据
有时候,默认的 name()
、address()
生成的数据虽然随机,但不够真实。你可以指定某些值更常见!
python
# 让特定公司名更常见
company_list = ["阿里巴巴", "腾讯", "华为", "百度", "字节跳动"]
print(fake.random_element(company_list)) # 随机公司
# 指定某些姓氏更常见
last_names = ["张", "王", "李", "赵", "刘"]
print(fake.last_name() + fake.first_name()) # 更真实的姓名
6. 生成唯一 & 不重复数据
Faker 可能会生成重复 的数据?不怕,我们有 unique
这个大招
python
print(fake.unique.email()) # 生成不重复的 email
print(fake.unique.name()) # 生成不重复的姓名
fake.unique.xxx()
让 Faker 确保不会重复- 避免数据库主键重复,特别适合批量造数据
Python,真是无所不能!
还记得文章开头的需求吗?现在,假数据分分钟就能搞定!
有了 Faker,手写测试数据的日子一去不复返了,我们可以 优雅地摸鱼 了
不过,咱们做人要诚信,这个库只能用来测试,别真的用来骗人哦!
👉 顺手点赞+在看,就是对花姐最大的支持! ❤️