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