本文目录导读:

我来帮你实现一个通用的模拟数据生成脚本,以下是几种常见语言的实现方式:
Python实现(最常用)
import random
import json
from datetime import datetime, timedelta
from faker import Faker
class DataGenerator:
def __init__(self, locale='zh_CN'):
self.fake = Faker(locale)
def generate_user(self):
"""生成单个用户数据"""
return {
'id': random.randint(10000, 99999),
'name': self.fake.name(),
'email': self.fake.email(),
'phone': self.fake.phone_number(),
'age': random.randint(18, 80),
'gender': random.choice(['男', '女']),
'address': self.fake.address(),
'salary': round(random.uniform(5000, 50000), 2),
'create_time': self.fake.date_time_between(
start_date='-365d',
end_date='now'
).strftime('%Y-%m-%d %H:%M:%S')
}
def generate_orders(self, num_orders=10):
"""生成订单数据"""
orders = []
for i in range(num_orders):
order = {
'order_id': f'ORD{datetime.now().strftime("%Y%m%d")}{i:04d}',
'user_id': random.randint(10000, 99999),
'product_name': random.choice([
'笔记本电脑', '手机', '平板', '耳机', '键盘'
]),
'quantity': random.randint(1, 5),
'price': round(random.uniform(100, 9999), 2),
'status': random.choice(['待支付', '已支付', '已发货', '已完成', '已取消']),
'order_date': self.fake.date_time_between(
start_date='-30d',
end_date='now'
).strftime('%Y-%m-%d %H:%M:%S')
}
orders.append(order)
return orders
def generate_student_scores(self, num_students=5):
"""生成学生成绩数据"""
subjects = ['语文', '数学', '英语', '物理', '化学']
students = []
for i in range(num_students):
student = {
'student_id': f'2024{i+1:04d}',
'name': self.fake.name(),
'class': random.choice(['A班', 'B班', 'C班']),
'scores': {
subject: random.randint(60, 100)
for subject in subjects
}
}
student['total_score'] = sum(student['scores'].values())
student['average_score'] = round(student['total_score'] / len(subjects), 1)
students.append(student)
return students
def generate_transactions(self, num_transactions=10):
"""生成交易数据"""
transactions = []
start_date = datetime.now() - timedelta(days=30)
for i in range(num_transactions):
date = start_date + timedelta(
days=random.randint(0, 30),
hours=random.randint(0, 23),
minutes=random.randint(0, 59)
)
transaction = {
'transaction_id': f'TXN{date.strftime("%Y%m%d%H%M%S")}{i:03d}',
'amount': round(random.uniform(10, 10000), 2),
'type': random.choice(['收入', '支出']),
'category': random.choice([
'餐饮', '交通', '购物', '娱乐', '医疗', '教育'
]),
'payment_method': random.choice([
'微信支付', '支付宝', '银行卡', '现金'
]),
'merchant': self.fake.company(),
'timestamp': date.strftime('%Y-%m-%d %H:%M:%S')
}
transactions.append(transaction)
return transactions
def save_to_json(data, filename):
"""保存为JSON格式"""
with open(filename, 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
print(f"数据已保存至 {filename}")
def save_to_csv(data, filename, fields=None):
"""保存为CSV格式(简单实现)"""
if fields is None:
fields = list(data[0].keys())
with open(filename, 'w', encoding='utf-8') as f:
f.write(','.join(fields) + '\n')
for item in data:
row = []
for field in fields:
value = str(item.get(field, ''))
if ',' in value:
value = f'"{value}"'
row.append(value)
f.write(','.join(row) + '\n')
print(f"数据已保存至 {filename}")
# 使用示例
if __name__ == "__main__":
# 安装依赖:pip install faker
generator = DataGenerator()
# 生成不同类型的测试数据
users = [generator.generate_user() for _ in range(5)]
orders = generator.generate_orders(5)
students = generator.generate_student_scores(3)
transactions = generator.generate_transactions(5)
# 保存数据
save_to_json({'users': users, 'orders': orders}, 'test_data.json')
save_to_csv(users, 'users.csv')
# 打印示例数据
print("\n=== 用户数据示例 ===")
for user in users:
print(f"用户: {user['name']}, 年龄: {user['age']}, 邮箱: {user['email']}")
print("\n=== 订单数据示例 ===")
for order in orders:
print(f"订单: {order['order_id']}, 商品: {order['product_name']}, 金额: {order['price']}")
JavaScript实现
const faker = require('faker/locale/zh_CN');
class DataGenerator {
constructor() {
this.faker = faker;
}
generateUser() {
return {
id: Math.floor(Math.random() * 90000) + 10000,
name: this.faker.name.findName(),
email: this.faker.internet.email(),
phone: this.faker.phone.phoneNumber(),
age: Math.floor(Math.random() * 62) + 18,
gender: Math.random() > 0.5 ? '男' : '女',
address: this.faker.address.streetAddress(),
salary: parseFloat((Math.random() * 45000 + 5000).toFixed(2)),
createTime: this.faker.date.between('2023-01-01', '2024-01-01')
};
}
generateOrders(count = 10) {
const orders = [];
for (let i = 0; i < count; i++) {
orders.push({
orderId: `ORD${Date.now()}${i.toString().padStart(4, '0')}`,
userId: Math.floor(Math.random() * 90000) + 10000,
productName: this.faker.commerce.productName(),
quantity: Math.floor(Math.random() * 5) + 1,
price: parseFloat(this.faker.commerce.price(100, 9999)),
status: ['待支付', '已支付', '已发货', '已完成', '已取消'][Math.floor(Math.random() * 5)]
});
}
return orders;
}
generateStudentScores(count = 5) {
const subjects = ['语文', '数学', '英语', '物理', '化学'];
const students = [];
for (let i = 0; i < count; i++) {
const scores = {};
let totalScore = 0;
subjects.forEach(subject => {
scores[subject] = Math.floor(Math.random() * 41) + 60;
totalScore += scores[subject];
});
students.push({
studentId: `2024${(i + 1).toString().padStart(4, '0')}`,
name: this.faker.name.findName(),
class: ['A班', 'B班', 'C班'][Math.floor(Math.random() * 3)],
scores: scores,
totalScore: totalScore,
averageScore: parseFloat((totalScore / subjects.length).toFixed(1))
});
}
return students;
}
}
// 使用示例
const generator = new DataGenerator();
const users = Array.from({length: 5}, () => generator.generateUser());
const orders = generator.generateOrders(5);
console.log('生成的用户数据:', JSON.stringify(users, null, 2));
console.log('生成的订单数据:', JSON.stringify(orders, null, 2));
// 保存到文件(Node.js环境)
const fs = require('fs');
fs.writeFileSync('test_data.json', JSON.stringify({users, orders}, null, 2));
console.log('数据已保存至 test_data.json');
安装依赖
Python:
pip install faker
JavaScript:
npm install faker
使用说明
- 选择合适的模板:根据你的数据类型选择对应的生成函数
- 自定义字段:可以修改生成逻辑,添加或删除字段
- 控制数量:通过参数控制生成数据的数量
- 保存格式:支持JSON、CSV等格式输出
这个脚本可以生成用户数据、订单数据、交易数据、学生成绩等多种常见的测试数据,适合用于开发测试、数据库填充、接口测试等场景。