更多精彩,请点击上方蓝字关注我们!
前言
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:\Users\Administrator\Desktop\excelDemo\book.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:\\Users\\Administrator\\Desktop\\excelDemo\\union_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:\Users\Administrator\Desktop\excelDemo'
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拼凑的方法,当工作簿名字不具有规律的时候,我们采用遍历文件夹的方法进行读取,然后进行文件合并。
你与数据世界
只差一个
公众号