Python拆分大型CSV文件(亲测拆分178G)注释超全

程序

 1 #!/usr/bin/env python3
 2 # -*- coding:utf-8 -*-
 4 # @FileName :Test.py
 5 # @Software PyCharm
 6 
 7 import os
 8 import pandas as pd
 9 
10 # filename为文件路径,file_num为拆分后的文件行数
11 # 根据是否有表头执行不同程序,默认有表头的
12 def Data_split(filename,file_num,header=True):
13     if header:
14         # 设置每个文件需要有的行数,初始化为1000W
15         chunksize=10000
16         data1=pd.read_table(filename,chunksize=chunksize,sep=',',encoding='gbk')
17         # print(data1)
18         # num表示总行数
19         num=0
20         for chunk in data1:
21             num+=len(chunk)
22         # print(num)
23         # chunksize表示每个文件需要分配到的行数
24         chunksize=round(num/file_num+1)
25         # print(chunksize)
26         # 分离文件名与扩展名os.path.split(filename)
27         head,tail=os.path.split(filename)
28         data2=pd.read_table(filename,chunksize=chunksize,sep=',',encoding='gbk')
29         i=0
30         for chunk in data2:
31             chunk.to_csv('{0}_{1}{2}'.format(head,i,tail),header=None,index=False)
32             print('保存第{0}个数据'.format(i))
33             i+=1
34     else:
35         # 获得每个文件需要的行数
36         chunksize=10000
37         data1=pd.read_table(filename,chunksize=chunksize,header=None,sep=',')
38         num=0
39         for chunk in data1:
40             num+=len(chunk)
41             chunksize=round(num/file_num+1)
42 
43             head,tail=os.path.split(filename)
44             data2=pd.read_table(filename,chunksize=chunksize,header=None,sep=',')
45             i=0
46             for chunk in data2:
47                 chunk.to_csv('{0}_{1}{2}'.foemat(head,i,tail),header=None,index=False)
48                 print('保存第{0}个数据'.format(i))
49                 i+=1
50 
51 filename='文件路径'
52 #num为拆分为的文件个数
53 Data_split(filename,num,header=True)

 

posted @ 2019-10-07 00:00  匹诺曹云  阅读(6926)  评论(5编辑  收藏  举报