分割大 csv檔案

2021-10-19 10:19:17 字數 1839 閱讀 9396

做推薦系統研究時,需要處理乙個包含10億條使用者資料的10g+的大csv檔案,直接用pandas讀取,記憶體不夠載入全部資料。想先對大檔案進行分割處理後,再逐個檔案處理。

將csv檔案按條目(行)數量進行分割為若干小檔案,儲存在待分割路徑資料夾下。

import pandas as pd

from pathlib import path

############################################

# @ res_file_path 待分割檔案路徑

res_file_path = path(r"e:\***\***.csv"

)# @ split_size 分割大小 這裡是100萬條乙個檔案

split_size =

10**

6############################################

tar_dir = res_file_path.parent/

("split_"

+res_file_path.name.split(

".")[0

])ifnot tar_dir.exists():

tar_dir.mkdir(

)print

("建立資料夾\t"

+str

(tar_dir)

)print

("目標路徑:\t"

+str

(tar_dir)

)print

("分割檔案:\t"

+str

(res_file_path)

)print

("分割大小:\t"+""

.format

(split_size)

)tmp = pd.read_csv(res_file_path,nrows =10)

columns = tmp.columns.to_list(

)idx =

0while

(len

(tmp)

>0)

: start =1+

(idx*split_size)

tmp = pd.read_csv(res_file_path,

header =

none

, names = columns,

skiprows = start,

nrows = split_size)

iflen

(tmp)

<=0:

break

file_name = res_file_path.name.split(

".")[0

]+"_{}_{}"

.format

(start,start+

len(tmp))+

".csv"

file_path = tar_dir/file_name

tmp.to_csv(file_path,index=

false

) idx+=

1print

(file_name +

"\t儲存成功"

)

通過pd.read_csv() 的skiprows引數來跳躍讀取資料,可以達到分批次讀取資料的效果。

也可以通過設定pd.read_csv()方法的iterator引數,返回迭代器物件來實現劃分。

或者設定pd.read_csv()方法的chunksize引數,指定每次讀入資料塊的大小,不斷地讀取資料達到分割的效果。

我是感覺skiprows方法比較靈活啦!

csv大檔案分割以及新增表頭

為了減輕編輯的工作,某種情況下 上可能用會到csv格式的檔案進行資料匯入,但一般 除了有上傳檔案大小限制以外,還有就是php指令碼語言讀取檔案到記憶體一些以及寫入到mysql中會超過最大範圍。因此只考慮到用分割檔案來實現。當然偷懶就沒有用到其他工具匯入的方式了 1.轉換csv檔案的到對應的編碼。這個...

利用python對csv檔案進行分割

有個任務,就是將乙個大的csv分割為幾個小的csv,當然是的包含表頭的。於是,我想到了類似於,用雙指標來做。import csv import os path users mac desktop 186 3.csv with open path,r newline as file csvreader...

linux檔案分割(將大的日誌檔案分割成小的)

linux下檔案分割可以通過split命令來實現,可以指定按行數分割和安大小分割兩種模式。linux下檔案合併可以通過cat命令來實現,非常簡單。在linux下用split進行檔案分割 模式一 指定分割後檔案行數 對與txt文字檔案,可以通過指定分割後檔案的行數來進行檔案分割。命令 split l ...