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)))