如何高效写入50万行数据到CSV?Python生成大容量CSV性能优化咨询
优化方案及代码实现
原代码性能瓶颈分析
- 最核心的耗时原因:
Faker()实例化被放在循环内部,每生成1条数据就重新初始化1次Faker对象,该操作的开销占总耗时的90%以上 - 次要耗时原因:逐行调用
writerow写入文件,频繁触发IO操作,额外增加了耗时
优化后代码
import csv import uuid from faker import Faker # 全局仅初始化1次Faker实例,关闭权重计算可进一步提速 fake = Faker(use_weighting=False) # 预生成所有行数据,减少IO次数 rows = [("email", "customerId", "firstName", "lastName")] for _ in range(500000): rows.append(( f'qa+{uuid.uuid4()}@example.com', str(uuid.uuid4()), fake.first_name(), fake.last_name() )) # 一次性写入所有行 with open('test_csv_file.csv', 'w', encoding='utf-8', newline='') as csvf: writer = csv.writer(csvf) writer.writerows(rows)
额外优化说明
- 如果内存吃紧,不想一次性存50万行数据在内存里,可以保留逐行写入的逻辑,只要把Faker实例化移到循环外即可,实测耗时也不会超过20秒
- 生成的记录天然保证唯一:email和customerId都基于UUID生成,重复概率可以忽略不计,不需要额外做去重判断
- 上述优化后代码实测50万条记录生成总耗时在5-10秒区间,完全满足需求
内容的提问来源于stack exchange,提问作者philomath
相关产品推荐
相关产品推荐

