今天财务同事要求帮忙解决一点问题,将一个300000行数据的excel按照每50000拆分成一个表,估计以后也经常需要,顺便帮忙处理了一下
import xlrd
import xlwt
def python_excel(read_url, save_url, limit):
"""
:param read_url: 需要处理的excel本地地址
:param save_url: 处理完成之后保存的地址
:param limit: 拆分之后每一个表的数据行数
如21000条数据,按照每limit=4000拆分,得到6个表,其中第6个表只有1000条数据
:return:
"""
data = xlrd.open_workbook(read_url)
table = data.sheets()[0]
nrows = table.nrows
ncols = table.ncols
sheets = int(nrows / limit) + 1 # 4
workbook = xlwt.Workbook(encoding='ascii')
for i in range(0, sheets): # 循环一个文件里面的每个表单
worksheet = workbook.add_sheet(str(i) + "_res") # 给表单命名
if i == sheets - 1: # i==3
n = nrows - i * limit
else:
n = limit
for row in range(0, n):
row_content = table.row_values(row + i * limit) # 获取某一行数据
for col in range(0, ncols): # 遍历每行的每一列元素
worksheet.write(row, col, row_content[col])
workbook.save(save_url)
print("已保存{}个表".format(i + 1))
print("全部处理完毕")
if __name__ == '__main__':
read = 'C:\\Users\\alex\\Desktop\\api_test.xls'
save = 'C:\\Users\\alex\\Desktop\\api_test01.xls'
python_excel(read, save, 30)
C:\Python37\python.exe D:/20210522/meet/excel.py
已保存1个表
已保存2个表
已保存3个表
已保存4个表
全部处理完毕
少量数据测试没问题,可以满足财务同事经常拆分表数据的需求,但是也有一个致命的弱点,就是速度太慢,如果数据量过大的话,建议采用多线程