使用Python拆分数据量大的CSV文件(亲测有效)

转载:https://www.cnblogs.com/FYZHANG/p/11629075.html

一次就运行成功了,感谢博主分享

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# @FileName :Test.py
# @Software PyCharm

import os
import pandas as pd

# filename为文件路径,file_num为拆分后的文件行数
# 根据是否有表头执行不同程序,默认有表头的
def Data_split(filename,file_num,header=True):
    if header:
        # 设置每个文件需要有的行数,初始化为1000W
        chunksize=10000
        data1=pd.read_table(filename,chunksize=chunksize,sep=',',encoding='gbk')
        # print(data1)
        # num表示总行数
        num=0
        for chunk in data1:
            num+=len(chunk)
        # print(num)
        # chunksize表示每个文件需要分配到的行数
        chunksize=round(num/file_num+1)
        # print(chunksize)
        # 分离文件名与扩展名os.path.split(filename)
        head,tail=os.path.split(filename)
        data2=pd.read_table(filename,chunksize=chunksize,sep=',',encoding='gbk')
        i=0
        for chunk in data2:
            chunk.to_csv('{0}_{1}{2}'.format(head,i,tail),header=None,index=False)
            print('保存第{0}个数据'.format(i))
            i+=1
    else:
        # 获得每个文件需要的行数
        chunksize=10000
        data1=pd.read_table(filename,chunksize=chunksize,header=None,sep=',')
        num=0
        for chunk in data1:
            num+=len(chunk)
            chunksize=round(num/file_num+1)

            head,tail=os.path.split(filename)
            data2=pd.read_table(filename,chunksize=chunksize,header=None,sep=',')
            i=0
            for chunk in data2:
                chunk.to_csv('{0}_{1}{2}'.format(head,i,tail),header=None,index=False)
                print('保存第{0}个数据'.format(i))
                i+=1

filename='文件路径'
#num为拆分为的文件个数
Data_split(filename,num,header=True)

可能因为版本的原因,运行时会提示 read_csv,

最后一行代码,filename处填上你自己想要拆分的文件地址,num填想要拆分成多少个文件

猜你喜欢

转载自www.cnblogs.com/bravesunforever/p/12075670.html