RPA学习-如何将大的 Excel 无损拆分成若干个小文件

前段时间有个同事在项目中遇到一个问题,需求中有一个是将 Excel 文件传入系统,但是上传过程中,发现文件太大,无法上传。因而需要将该大文件拆分成若干个小文件,在上传。
代码如下:

coding=utf-8

import os
import pandas as pd
import math

def file_split(filename, file_num, header=True):

根据是否有表头执行不同程序,默认是否表头的

if header:
    # 获得每个文件需要有的行数
    chunksize = 1000000  # 先初始化的chunksize是100W
    data1 = pd.read_csv(open(filename), chunksize=chunksize, sep=',', encoding='utf-8')
    num = 0
    for chunk in data1:
        num += len(chunk)
    chunksize = round(num / file_num + 1)
    # 需要存的file
    head, tail = os.path.splitext(filename)
    data2 = pd.read_csv(open(filename), chunksize=chunksize, sep=',', encoding='utf-8')
    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 = 1000000  # 先初始化的chunksize是100W
    data1 = pd.read_csv(open(filename), chunksize=chunksize, header=None, sep=',')
    num = 0
    for chunk in data1:
        num += len(chunk)
    chunksize = round(num / file_num + 1)

    # 需要存的file
    head, tail = os.path.splitext(filename)
    data2 = pd.read_csv(open(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

if name == ‘main’:
rootdir = “C:/file/wu”
for parent, dirnames, filenames in os.walk(rootdir): # 三个参数:分别返回1.父目录 2.所有文件夹名字(不含路径) 3.所有文件名字
for filename in filenames: # 输出文件信息
file = os.path.join(parent, filename).replace(’\’, ‘/’) # 输出文件路径信息
print(“文件名为:”,filename)
size = os.path.getsize(file) # 读取文件的大小,单位为B
mb_size = float(size)/(1024*1024) # 转化单位为MB
print(“文件大小为{}MB”.format(mb_size))
time = math.ceil(mb_size/100) # 拆分文件的次数,以100MB为每个文件的大小
print(“按照每份文件大小100MB,分成{}份”.format(time))
file_split(filename=file, file_num=time, header=False)
代码中解决一个大文件夹下,读取每个子文件夹下所有文件,并以每个小文件大小为 100MB 去拆分。先获取文件的大小,与 100 相除并向上取整,得到需拆分的个数,然后进行无损拆分。实际中可根据需求更改。

执行结果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44447687/article/details/89473956