本文目录导读:

- 方法一:使用Python + Faker库(推荐)
- 方法二:简单Python脚本(无需额外库)
- 方法三:Bash Shell脚本(Linux/Mac)
- 方法四:高级数据生成(带数据验证)
- 安装依赖
- 快速使用命令
- 推荐方案
我来介绍几种批量生成CSV测试数据的方法:
使用Python + Faker库(推荐)
import csv
import random
from faker import Faker
from datetime import datetime, timedelta
# 初始化Faker
fake = Faker('zh_CN') # 中文数据
# 定义生成函数
def generate_test_data(num_rows=1000):
data = []
for _ in range(num_rows):
row = {
'id': random.randint(10000, 99999),
'name': fake.name(),
'email': fake.email(),
'phone': fake.phone_number(),
'address': fake.address(),
'company': fake.company(),
'job': fake.job(),
'age': random.randint(18, 80),
'salary': random.randint(5000, 50000),
'created_at': fake.date_time_between(
start_date='-1y',
end_date='now'
).strftime('%Y-%m-%d %H:%M:%S'),
'is_active': random.choice([True, False]),
'score': round(random.uniform(0, 100), 2)
}
data.append(row)
return data
# 保存为CSV
def save_to_csv(data, filename='test_data.csv'):
if not data:
return
# 获取字段名
fieldnames = data[0].keys()
with open(filename, 'w', newline='', encoding='utf-8-sig') as f:
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(data)
print(f"成功生成 {len(data)} 条数据到 {filename}")
# 使用示例
if __name__ == '__main__':
# 生成10000条数据
data = generate_test_data(10000)
save_to_csv(data, 'large_test_data.csv')
# 显示前5条
print("前5条数据示例:")
for i, row in enumerate(data[:5]):
print(f"{i+1}. {row}")
简单Python脚本(无需额外库)
import csv
import random
import string
from datetime import datetime, timedelta
def generate_simple_test_data(rows=1000):
"""生成简单的测试数据,无需安装第三方库"""
# 姓氏和名字列表
last_names = ['张', '李', '王', '赵', '刘', '陈', '杨', '黄', '周', '吴']
first_names = ['伟', '芳', '强', '静', '磊', '娜', '军', '娟', '勇', '敏',
'华', '丽', '涛', '艳', '明', '超', '秀英', '洋', '鑫', '磊']
# 域名列表
domains = ['qq.com', '163.com', 'gmail.com', 'outlook.com', 'company.cn']
# 地址组件
cities = ['北京', '上海', '广州', '深圳', '杭州', '成都', '武汉', '南京']
streets = ['中山路', '人民路', '解放路', '建设路', '和平路']
def random_phone():
prefixes = ['138', '139', '150', '151', '152', '186', '187', '188']
return random.choice(prefixes) + ''.join(random.choices(string.digits, k=8))
def random_name():
return random.choice(last_names) + random.choice(first_names)
def random_email(name):
return f"{name.lower()}{random.randint(1, 999)}@{random.choice(domains)}"
def random_address():
return f"{random.choice(cities)}市{random.choice(streets)}{random.randint(1, 999)}号"
data = []
for i in range(rows):
name = random_name()
data.append({
'id': i + 1,
'name': name,
'email': random_email(name),
'phone': random_phone(),
'address': random_address(),
'age': random.randint(18, 65),
'salary': random.randint(5000, 80000),
'department': random.choice(['技术部', '市场部', '销售部', '人事部', '财务部']),
'status': random.choice(['在职', '离职', '试用期']),
'entry_date': (datetime.now() - timedelta(days=random.randint(30, 1000))).strftime('%Y-%m-%d')
})
return data
# 保存CSV
def save_to_csv_simple(data, filename='simple_test_data.csv'):
if not data:
return
with open(filename, 'w', newline='', encoding='utf-8-sig') as f:
writer = csv.DictWriter(f, fieldnames=data[0].keys())
writer.writeheader()
writer.writerows(data)
print(f"成功生成 {len(data)} 条数据到 {filename}")
if __name__ == '__main__':
# 生成并保存
data = generate_simple_test_data(5000)
save_to_csv_simple(data, 'simple_data.csv')
Bash Shell脚本(Linux/Mac)
#!/bin/bash
# 生成CSV测试数据 - shell版本
# 用法: ./generate_csv.sh [行数]
ROWS=${1:-1000} # 默认1000行
OUTPUT_FILE="test_data_$(date +%Y%m%d_%H%M%S).csv"
# CSV头
echo "id,name,email,age,city,amount,date" > $OUTPUT_FILE
# 数据
for ((i=1; i<=$ROWS; i++))
do
# 生成随机数据
ID=$i
NAME="User_$i"
EMAIL="user${i}@example.com"
AGE=$((RANDOM % 50 + 18))
# 随机城市
CITIES=("北京" "上海" "广州" "深圳" "杭州")
CITY=${CITIES[$((RANDOM % 5))]}
# 随机金额(两位小数)
AMOUNT=$(awk -v min=100 -v max=10000 'BEGIN{srand(); printf "%.2f", min+rand()*(max-min)}')
# 随机日期
YEAR=$((RANDOM % 3 + 2022))
MONTH=$(printf "%02d" $((RANDOM % 12 + 1)))
DAY=$(printf "%02d" $((RANDOM % 28 + 1)))
DATE="${YEAR}-${MONTH}-${DAY}"
echo "$ID,$NAME,$EMAIL,$AGE,$CITY,$AMOUNT,$DATE" >> $OUTPUT_FILE
done
echo "✅ 成功生成 $ROWS 条数据到 $OUTPUT_FILE"
高级数据生成(带数据验证)
import csv
import random
import hashlib
from faker import Faker
from typing import List, Dict
fake = Faker('zh_CN')
class TestDataGenerator:
"""测试数据生成器类"""
def __init__(self):
self.data_types = {
'personal': self._generate_personal,
'financial': self._generate_financial,
'product': self._generate_product,
'mixed': self._generate_mixed
}
def _generate_personal(self) -> Dict:
"""个人信息数据"""
name = fake.name()
return {
'id': fake.uuid4(),
'username': name.translate(str.maketrans('', '', ' ')).lower(),
'password_hash': hashlib.sha256(fake.password().encode()).hexdigest(),
'full_name': name,
'phone': fake.phone_number(),
'email': fake.email(),
'id_card': fake.ssn(),
'birth_date': fake.date_of_birth(minimum_age=18, maximum_age=80).isoformat(),
'gender': random.choice(['男', '女']),
'province': fake.province()
}
def _generate_financial(self) -> Dict:
"""金融数据"""
return {
'transaction_id': f'TXN{fake.random_int(min=100000, max=999999)}',
'account': f'{random.choice(["6222", "6217", "6228"])}{"".join([str(random.randint(0,9)) for _ in range(12)])}',
'amount': round(random.uniform(10, 100000), 2),
'currency': random.choice(['CNY', 'USD', 'EUR', 'JPY']),
'status': random.choice(['成功', '失败', '处理中']),
'timestamp': fake.date_time_this_year().isoformat(),
'merchant': fake.company(),
'channel': random.choice(['手机银行', '网银', 'POS', '支付宝', '微信'])
}
def _generate_product(self) -> Dict:
"""产品数据"""
categories = ['电子产品', '服装', '食品', '图书', '家居']
return {
'sku': f'SKU{fake.random_int(min=10000, max=99999)}',
'product_name': fake.catch_phrase(),
'category': random.choice(categories),
'price': round(random.uniform(10, 9999), 2),
'stock': random.randint(0, 1000),
'rating': round(random.uniform(1, 5), 1),
'description': fake.text(max_nb_chars=200),
'create_date': fake.date_this_year().isoformat()
}
def _generate_mixed(self) -> Dict:
"""混合数据"""
return self._generate_personal() | self._generate_financial() | self._generate_product()
def generate_batch(self, data_type: str, rows: int, output_file: str):
"""批量生成数据"""
if data_type not in self.data_types:
raise ValueError(f"不支持的数据类型: {data_type}")
generator = self.data_types[data_type]
data = [generator() for _ in range(rows)]
# 保存CSV
if data:
with open(output_file, 'w', newline='', encoding='utf-8-sig') as f:
fieldnames = data[0].keys()
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(data)
print(f"✅ 成功生成 {rows} 条 {data_type} 类型数据到 {output_file}")
# 显示统计信息
print(f"📊 数据大小: {len(data)} 行, {len(fieldnames)} 列")
print(f"📋 字段: {', '.join(fieldnames)}")
return data
# 使用示例
if __name__ == '__main__':
generator = TestDataGenerator()
# 批量生成不同类型数据
generator.generate_batch('personal', 1000, '个人数据.csv')
generator.generate_batch('financial', 500, '金融数据.csv')
generator.generate_batch('product', 2000, '产品数据.csv')
generator.generate_batch('mixed', 5000, '混合数据.csv')
安装依赖
Python方法需要安装Faker库:
pip install faker
快速使用命令
-
Python一行命令(如果已安装faker):
python -c "from test_generator import TestDataGenerator; TestDataGenerator().generate_batch('personal', 1000, 'output.csv')" -
Bash脚本执行:
chmod +x generate_csv.sh ./generate_csv.sh 5000
推荐方案
- 快速测试:使用方法二(简单Python脚本)
- 生产级数据:使用方法一(Faker库)
- 批量多种数据:使用方法四(类封装)
- Linux/Mac环境:使用方法三(Shell脚本)
根据你的实际需求选择合适的方案即可!
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播