在工作中,有时候因为部门间的数据权限问题,推送数据的时候往往是通过邮件完成,对于量大的数据,往往会拆成很多个excel发送,到下一个部门导入数据库之前,总是需要先将所有excel合成一个excel,再导入数据库。手动操作往往受限于各种因素,嫌麻烦?打开excel太慢浪费时间?需要上班之前导好表又不想每天都提前来上班?总之下面这个代码可以解救你:
# -*- coding: utf-8 -*-
#合并Excel文件import xlrd
import xlsxwriter#打开excel文件
def open_xls(file):fh=xlrd.open_workbook(file)#打开文件file,并读取到fh中return fh#获取excel中所有的sheet表
def getsheet(fh):return fh.sheets()#获取文件fh中所有的工作表#获取sheet表的行数
def getnrows(fh,sheet):table=fh.sheets()[sheet]return table.nrows#.nrows获取table表的行数#按行读取文件内容并依次写入datavalue
def getFilect(file,shnum):fh=open_xls(file)#调用open_xls函数,打开excel文件table=fh.sheets()[shnum]num=table.nrows#num表示table表的行数for row in range(num):rdata=table.row_values(row)#获取table表的第row行的数据,赋给rdatadatavalue.append(rdata)#依次将rdata添加到datavalue的末尾,每读取一行就写入一行return datavalue#获取fh文件中sheet表的个数
def getshnum(fh):x=0sh=getsheet(fh)for sheet in sh:x+=1return xif __name__=='__main__':#将需要合并的excel文件形成列表allxlsallxls=['E:\\pythondata\\union\\test_0.xlsx','E:\\pythondata\\union\\test_1.xlsx']#存储所有读取的结果datavalue=[]for fl in allxls:#遍历所有需要合并的excel文件fh=open_xls(fl)#打开excel文件x=getshnum(fh)#获取文件中sheet表的个数for shnum in range(x):#遍历当前excel文件的所有sheet表print("正在读取文件:"+str(fl)+"的第"+str(shnum)+"个sheet表的内容...")#提示进度rvalue=getFilect(fl,shnum)#将从当前sheet表中读取的所有数据写入rvalue#定义最终合并后生成的新文件endfile='E:\\pythondata\\union\\test_3.xlsx'#合并文件所处的位置与定义文件名wb1=xlsxwriter.Workbook(endfile)#创建一个sheet工作对象ws=wb1.add_worksheet()#遍历rvalue中的所有单元格,并将读取的单元格的值写入合并后的文件中for a in range(len(rvalue)):#遍历rvalue所有行for b in range(len(rvalue[a])):#遍历rvalue的第a行的所有列,即实现所有单元格的遍历c=rvalue[a][b]#获取第a行第b列的值ws.write(a,b,c)#将第a行第b列的值c写入wswb1.close()#写入完成后关闭excel文件print("\n文件合并完成!!!\nExcel文件所处位置:"+str(endfile))#提示合并结束
合并完成后的excel文件往往是很大的,直接使用excel文件导入数据库的时候,容易出现各种漏数据的问题。那么就把它转化成csv吧:
#将合并后的excel文件转化成csv,方便导入数据库
import pandas as pdfile='E:\\pythondata\\union\\test_3.xlsx'
outfile='E:\\pythondata\\union\\test_3.csv'def xlsx_to_csv_pd():data_xls = pd.read_excel(file, index_col=0)data_xls.to_csv(outfile, encoding='utf-8')if __name__ == '__main__':xlsx_to_csv_pd()
print("\n转化完成!!!\nCSV文件所处位置:"+str(outfile))
运行结果:
正在读取文件:E:\pythondata\union\test_0.xlsx的第0个sheet表的内容... 正在读取文件:E:\pythondata\union\test_0.xlsx的第1个sheet表的内容... 正在读取文件:E:\pythondata\union\test_1.xlsx的第0个sheet表的内容...文件合并完成!!! Excel文件所处位置:E:\pythondata\union\test_3.xlsx转化完成!!! CSV文件所处位置:E:\pythondata\union\test_3.csv