使用Python的xlrd模块读取Excel表格
在日常工作中,我们需要从Excel表格中提取数据进行分析。对于Python编程者而言,如何使用Python读取Excel表格数据是一个必须掌握的技能。本文介绍了使用Python的xlrd模块来操作Excel表格,以及封装了一个OpExcel类来实现各种功能。
导入模块
在使用Python读取Excel表格之前,我们需要导入xlrd模块,如果系统默认编码不是utf-8,还需要重新设置一下编码格式。
```
import xlrd
import sys
reload(sys)
('utf-8')
```
封装OpExcel类
为方便操作Excel表格,我们封装了一个OpExcel类,用于处理Excel表格。首先在类的初始化函数中打开Excel文件,并获取所有sheet名称。
```
class OpExcel(object):
"""操作Excel"""
def __init__(self, file_path):
super(OpExcel, self).__init__()
_path file_path
self.Excel _workbook(file_path)
_names()
```
获取sheet索引
由于每个Excel文件可能包含多个sheet,我们需要根据sheet名称来获取要操作的sheet的索引值。为此,我们添加了get_tableindex方法,用于获取sheet的索引值。
```
def get_tableindex(self, table):
"""获取excel需要操作的sheet的索引值"""
if table in
index_data(table)
return (index_data)
else:
print (table u'不是excel的sheet名称')
return False
```
获取所有数据
为了方便操作,我们可以将Excel表格中的所有数据按照字典形式保存,并按行取Excel表格中的数据。为此,我们添加了get_data方法。
```
def get_data(self):
"""获取excel所有数据已字典形式保存,按行取excle"""
excle{}
for table in
all_value[]
_by_name(table)
for i in range():
all_(_values(i))
excle[table]all_value
return excle
```
获取表行数和列数
有时候我们需要知道Excel表格中某个sheet的行数或列数,为此,我们添加了get_nrows和get_mcols方法分别用于获取表的行数和列数。
```
def get_nrows(self, table):
"""获取表行数"""
_by_name(table)
return
def get_mcols(self, table):
"""获取表列数"""
_by_name(table)
return
```
获取某一行数据和某一列数据
有时候我们只需要获取Excel表格中某一行或某一列的数据,为此,我们添加了get_rowdate和get_coldate方法。
```
def get_rowdate(self, table, nrow0, mcol0):
"""从M列开始获取第N行数据"""
_by_name(table)
data_values(nrow)
return (data[mcol:])
def get_coldate(self, table, nrow0, mcol0):
"""从N行开始获取第M列数据"""
_by_name(table)
data_values(mcol)
return (data[nrow:])
```
获取某个单元格的数据和类型
有时候我们需要获取Excel表格中某个单元格的数据和数据类型,为此,我们添加了get_cellate方法。
```
def get_cellate(self, table, nrow0, mcol0):
"""获取某个单元格数据和类型
ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error"""
_by_name(table)
type(nrow,mcol).ctype
if (type 3):
data_value xlrd.xldate_as_tuple((nrow,mcol).value,)
value datetime(*data_value).strftime('%Y/%m/%d %H:%M:%S')
else:
value(nrow,mcol).value
data[type,value]
return (data)
```
获取合并单元格的行和列
有时候我们需要获取Excel表格中合并单元格有值的行和列,为此,我们添加了get_mergedcell方法。
```
def get_mergedcell(self, table):
"""获取合并单元格有值得行和列"""
_by_name(table)
data []
for (nrow,rowhigh,mcol,colhigh) in _cells:
([nrow,mcol])
return (data)
```
检查Excel表格中特定数据类型的单元格
有时候我们需要检查Excel表格中是否存在特定的单元格数据类型,为此,我们添加了get_ctype3方法。
```
def get_ctype3(self, table):
"""检查每一个单元格的ctype:0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
输出ctype3的单元格"""
nrows_nrows(table)
mcols_mcols(table)
data[]
for nrow in range(nrows):
for mcol in range(mcols):
type(nrow,mcol).ctype
if (type3):
([nrow,mcol])
if data![]:
return data
else:
return False
```
根据内容查找某一行的数据
有时候我们需要根据内容查找Excel表格中某一行的数据,为此,我们添加了get_datarow方法。
```
def get_datarow(self, table, data, cols0):
"""根据内容查找nrow行"""
if type(data)str or type(data)unicode:
mcolNone
nlist[]
datanrow{}
table_data_coldate(table,0,cols)
print(u'开始查找数据')
for nrow,row_data in enumerate(table_data):
if row_data data:
(nrow)
print(u'%s is in the %s Row'%(data,str(nrow)))
if nlist![] :
datanrow[data]nlist
return (datanrow)
else:
print(u'没匹配到数据')
return False
else:
print(u'Value type is wrong')
return False
```
总结:
本文介绍了使用Python的xlrd模块来读取Excel表格,并封装了一个OpExcel类来实现各种常用的功能,包括获取表格行数、列数、指定行列数据、指定单元格数据、合并单元格、特定数据类型单元格检查等。这些方法可以帮助你更加便捷地处理Excel表格。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。