我的知识记录

Python生成测试数据Faker库实战

用Faker库批量生成中文姓名、地址、手机号、公司名等假数据,配合pandas导出DataFrame和Excel,用于开发测试和演示样例。

场景痛点

写演示脚本、做PPT截图、测试清洗逻辑,总得先造一份像样的数据。手写几十行列表太费劲,用真实客户数据又有隐私问题。Faker库一行生成一个中文名、手机号、地址,批量造几千行毫无压力,直接导出Excel或SQLite。

用到的库

pip install faker pandas

完整代码

import pandas as pd
from faker import Faker
from pathlib import Path

def gen_users(n=100):
# 中文本地化,生成中文姓名、地址
fake = Faker("zh_CN")
Faker.seed(42)  # 固定种子,每次运行生成一样的结果

rows = []
for _ in range(n):
rows.append({
"name":     fake.name(),
"gender":   fake.random_element(["男", "女"]),
"phone":    fake.phone_number(),
"address":  fake.address().replace("\n", " "),
"company":  fake.company(),
"job":      fake.job(),
"salary":   fake.random_int(8000, 30000),
"join_date": fake.date_between(start_date="-3y", end_date="today"),
})
return pd.DataFrame(rows)

def gen_orders(n=500, user_count=100):
fake = Faker("zh_CN")
Faker.seed(7)
rows = []
for _ in range(n):
rows.append({
"order_id":  fake.ean13(),
"cust_id":   fake.random_int(1, user_count),
"amount":    round(fake.pyfloat(left_digits=4, right_digits=2, positive=True), 2),
"pay_time":  fake.date_time_between(start_date="-6M", end_date="now"),
"status":    fake.random_element(["已支付", "已发货", "已完成", "已退款"]),
})
return pd.DataFrame(rows)

if __name__ == "__main__":
users = gen_users(100)
orders = gen_orders(500)
print("用户表:")
print(users.head())
print("\n订单表:")
print(orders.head())

# 导出Excel
out = Path("fake_data.xlsx")
with pd.ExcelWriter(out, engine="openpyxl") as writer:
users.to_excel(writer, index=False, sheet_name="users")
orders.to_excel(writer, index=False, sheet_name="orders")
print(f"\n导出:{out.resolve()}")

代码讲解

  • Faker("zh_CN") 加载中文本地化,生成的姓名、地址、手机号都是中文格式。其他语言用 en_USja_JP
  • Faker.seed(42) 固定随机种子,每次运行生成相同数据,方便复现bug。
  • 常用方法:fake.name() 中文名、fake.phone_number() 手机号、fake.address() 地址、fake.company() 公司名、fake.job() 职位、fake.random_int(a,b) 随机整数、fake.date_between() 随机日期。
  • fake.random_element([...]) 从列表里随机选一个,适合枚举字段。
  • 生成后直接转DataFrame,想写SQLite就 df.to_sql(),见 pandas读写SQLite

运行结果

脚本同目录生成 fake_data.xlsx,含users和orders两个sheet。控制台打印用户表前5行(中文名、手机号、公司)和订单表前5行(订单号、金额、支付时间、状态)。数据是假的,可放心用于演示和测试。

注意事项

  • Faker生成的手机号、身份证号都是假格式,不要用于真实业务系统做生产数据。
  • 批量生成10万行以上时,列表append比逐行DataFrame快得多,最后一次性 pd.DataFrame(rows)
  • 地址里默认带换行,.replace("\n", " ") 清理,否则Excel里一格多行。
  • 要生成英文/日文数据,把 zh_CN 换成对应locale即可。

Python生成测试数据Faker库实战

标签:

更新时间:2026-09-14 20:59:55

上一篇:Python读取网页JSON接口数据存CSV教程

下一篇:Python批量插入数据到数据库executemany详解