Python工具开发实践-csv文件分割
- 2019 年 12 月 26 日
- 筆記
今天工作中需要处理一个700多W行的csv文件,要求将csv文件按照100W行进行分割,以便可以用excel打开,找了几个脚本,处理小文件都差不多,但是当我尝试处理这个大文件时,代码效率就凸显出来了,有的程序半个小时都处理不完,有的只要十几秒,今天把这个高效的代码分享给大家。
首先获取待处理文件名称
file_name = input('请输入文件名称(包含路径): ')
读取文件
with open(file_name, 'r') as f: csv_file = f.readlines()
定义csv分割行数
linesPerFile = 1000000
初始化文件编号为1
filecount = 1
以0为起点,文件行数为终点,分片大小为间隔,循环遍历文件,每次遍历行数即为分片大小,而不是每行遍历一次
for i in range(0, len(csv_file), linesPerFile):
打开目标文件准备写入,不存在则创建
with open(file_name[:-4] + '_' + str(filecount) + '.csv', 'w+') as f:
判断是否为第一个文件,不是的话需要先写入标题行
if filecount > 1: f.write(csv_file[0])
批量写入i至i+分片大小的多行数据
f.writelines(csv_file[i:i+linesPerFile])
完成一个文件写入之后,文件编号增加1
filecount += 1
至此,主程序基本完成了,可以采用time函数在程序处理前后进行打点计时,统计处理耗时。
st = time.time()et = time.time()cost_time = et - stprint('处理完成,程序运行时间: {}秒'.format(float('%.2f' % cost_time)))