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

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 接口返回的数据 ,可以使用 jsondict 结构,然后格式化输出。下面介绍几种常见的方法:

方法 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,手写测试数据的日子一去不复返了,我们可以 优雅地摸鱼

不过,咱们做人要诚信,这个库只能用来测试,别真的用来骗人哦!

👉 顺手点赞+在看,就是对花姐最大的支持! ❤️

相关推荐
dhxhsgrx2 小时前
PYTHON训练营DAY25
java·开发语言·python
伊织code4 小时前
PyTorch API 5 - 全分片数据并行、流水线并行、概率分布
pytorch·python·ai·api·-·5
风逸hhh5 小时前
python打卡day25@浙大疏锦行
开发语言·python
魔尔助理顾问6 小时前
Flask如何读取配置信息
python·flask·bootstrap
jc_hook7 小时前
Python 接入DeepSeek
python·大模型·deepseek
IsPrisoner7 小时前
Go语言安装proto并且使用gRPC服务(2025最新WINDOWS系统)
开发语言·后端·golang
chicpopoo7 小时前
Python打卡DAY25
开发语言·python
crazyme_68 小时前
深入掌握 Python 切片操作:解锁数据处理的高效密码
开发语言·python
tan180°8 小时前
Linux进程信号处理(26)
linux·c++·vscode·后端·信号处理