利用Python xlrd批量合并Excel文件

利用Python处理Excel文件效率相比VBA要高,本文是针对相同格式的Excel文件进行快速合并!

前言

Python可以很方便地对Excel进行处理。本篇文章主要介绍xlrd包,高效灵活读取Excel的包。

主要包含读取工作表名称,对工作名称的索引,查看单元格内容,获取单元格内容的数据类型(ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error)

xlrd基本操作

import xlrd
import pandas as pd
import numpy as np
path = r’C:UsersAdministratorDesktopexcelDemobook.xlsm’

###打开工作簿
xlsx = xlrd.open_workbook(path)

###查看所有工作表名称
all_shtnames = xlsx.sheet_names()

###根据下标对工作表进行索引
sheet1 = xlsx.sheets()[0]
sheet1.name
Out[1]: ‘home’

### 根据sheet索引或者名称获取sheet内容
sheet2 = xlsx.sheet_by_index(1)
print(sheet2.name + ‘ ‘ + str(sheet2.nrows) + ‘ ‘ + str(sheet2.ncols))
Out[2]: ‘N1 21 3’

sheet3 = xlsx.sheet_by_name(‘N2’)
print(sheet3.name + ‘ ‘ + str(sheet3.nrows) + ‘ ‘ + str(sheet3.ncols))

#查看sheet2的特定切片数据、整行整列,单个单元格数值(索引从0开始)
sheet1_nrow5 = sheet2.row_values(4) #查看第5行数据
sheet1_ncol3 = sheet2.col_values(2) #查看第3列数据

cell11 = sheet2.cell(0,0).value ###.encode(‘utf-8’)
cell12 = sheet2.cell_value(0,1) ###.encode(‘utf-8’)
cell13 = sheet2.row(0)[2].value #查看第1行第3列的数据

###获取单元格内容的数据类型
###说明:ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
sheet1.cell(0,0).ctype #第1行第1列:class 为string类型
sheet1.cell(1,1).ctype #第2行第2列: 为string类型
sheet1.cell(1,2).ctype #第2行第3列: 为number类型
合并规律表名的工作簿(N1.xlsx….N10.xlsx)

#要求:1)合并10个工作簿,表名具有规律性 (N1.xlsx,N2.xlsx…N10.xlsx)
import os
import xlrd
#from openpyxl import Workbook
import pandas as pd

path = ‘C:UsersAdministratorDesktopexcelDemounion_wk’
data = []
for i in range(1,11):
wk_n = path + ‘N’ + str(i) + ‘.xlsx’
xlsx = xlrd.open_workbook(wk_n)
sht1 = xlsx.sheet_by_index(0) #第一个工作表
nrow = sht1.nrows
title = sht1.row_values(0) #查看第一行数据
for j in range(1,nrow):
data.append(sht1.row_values(j))

content= pd.DataFrame(data)
#修改标题
content.columns= title
#写入csv文件
#content.to_csv(path+’py_union.csv’, sep=’,’, header=True, index=False)
#写入excel文件
content.to_excel(path+’py_union.xlsx’, header=True, index=False)
合并无规律表名的工作簿(北京.xlsx,上海.xlsx…郑州.xlsx)

#要求:1)合并10个工作簿,表名不具有规律性 (北京.xlsx,上海.xlsx…郑州.xlsx)
import os
import xlrd
import pandas as pd

#获取所有需要合并的工作簿路径,生成list
def file_name(file_dir):
list=[]
for file in os.listdir(file_dir):
if os.path.splitext(file)[1] == ‘.xlsx’:
list.append(file)
return list

path = r’C:UsersAdministratorDesktopexcelDemo’
wks = file_name(path)

data = [] #定义一个空list
for i in range(len(wks)):
read_xlsx = xlrd.open_workbook(path + ” + wks[i])
sheet1 = read_xlsx.sheets()[0] #查看sheet1的数据
nrow = sheet1.nrows
title = sheet1.row_values(0) #查看第1行数据
for j in range(1,nrow): #逐行打印
data.append(sheet1.row_values(j))

content= pd.DataFrame(data)
#修改标题
content.columns= title
#写入文件
#写入csv文件
#content.to_csv(path+’py_union.xlsx’, sep=’,’, header=True, index=False)
#写入excel文件
content.to_excel(path+’py_union2.xlsx’, header=True, index=False)
总结

本文主要是利用xlrd对Excel工作簿来进行合并。当工作簿名字有规律的时候我们采用path拼凑的方法,当工作簿名字不具有规律的时候,我们采用遍历文件夹的方法进行读取,然后进行文件合并。

本文由 大海鱼数据分析 投稿至 数据分析网 并经编辑发表,内容观点不代表本站立场,如转载请联系原作者,本文链接:https://www.afenxi.com/71498.html 。

(2)
大海鱼数据分析的头像大海鱼数据分析专栏
上一篇 2019-08-06 09:18
下一篇 2019-08-18 22:20

相关文章

关注我们
关注我们
分享本页
返回顶部