【python】解析Excel中使用xlrd库、xlwt库操作,读取Excel文件详解(一)
上文提供了Excel文件读写操作的基本模板,本文进一步详解这两个模块的功能。
一、Book(class)
由xlrd.open_work(“example.xls”)返回
- nsheets: sheets数
- sheet_names: sheet名称列表
- sheets: sheet列表
- sheet_by_index(sheetx): 按序号提取sheet
- sheet_by_name(sheet_name): 按名称提取sheet
二、Sheet(class)
由Book object相关方法返回
- name:sheet名
- nrows: 行数
- ncols: 列数
- cell(rowx,colx):第rows行colx列的单元格
- cell_type(rowx,colx): 数据类型
- cell_value(rows,colx): 数值
- col(colx): 第colx列所有单元格组成的列表
- col_slice(colx,start_rowx=0,end_rowx=None): 第colx列指定单元格组成的列表
- col_types(colx,start_rowx=0,end_rowx=None): 第colx列指定单元格数值类型组成的列表
- col_values(colx,start_rowx=0,end_rowx=None): 第colx列指定单元格数值组成的列表
- row同样有col的各项操作,此处略去
三、Cell(class)
由Sheet object(s)相关方法返回
ctype: 一个int型变量,对应不同的数值类型
value: 单元格的值
四、xlrd模块使用详解
1、导入模块
In [1]: import xlrd
2、打开Excel文件读取数据
In [2]: data = xlrd.open_workbook('sample.xls')In [3]: dataOut[3]: <xlrd.book.Book at 0x21df9f4a198>
3、使用技巧
# 获取一个工作表,index_number表示表的索引号,索引号从0开始,表示第一张表,1表示第二张表,依次类似。# table = data.sheets()[index_number] # 1、通过索引顺序获取In [4]: tables = data.sheets()In [5]: tablesOut[5]: [<xlrd.sheet.Sheet at 0x21df9f5bcc0>]In [6]: tables[0]Out[6]: <xlrd.sheet.Sheet at 0x21df9f5bcc0>#若果有两个表格的情况,sheets会得到两个表的地址In [7]: data2 = xlrd.open_workbook('sample2.xls')In [9]: data2.sheets()Out[9]: [<xlrd.sheet.Sheet at 0x21df9f62fd0>, <xlrd.sheet.Sheet at 0x21df9f62f98>]#table = data.sheet_by_index(index_number) #2、通过索引顺序获取,index_number表示表的索引号,索引号从0开始,表示第一张表,1表示第二张表,依次类似。In [10]: data2.sheet_by_index(0)Out[10]: <xlrd.sheet.Sheet at 0x21df9f62fd0>3、table = data.sheet_by_name(sheet_name)#通过名称获取,sheet_name表示工作表的名字,但是需要注意的是这个表明的字符串需要使用Unicode的字符串,如:u'xxx'In [11]: data2.sheet_by_name('sample')Out[11]: <xlrd.sheet.Sheet at 0x21df9f62fd0>
获取整行和整列的值(数组)
#获取行的值#table.row_values(row_index)In [12]: table = data2.sheet_by_name('sample')In [13]: table.row_values(0)Out[13]: ['netcon', 'conw.net']#获取列的值#table.col_values(i)In [14]: table.col_values(0)Out[14]: ['netcon']
获取行数和列数
#获取行数#nrows = table.nrows In [16]: table.nrowsOut[16]: 1#获取列数#ncols = table.ncolsIn [17]: table.ncolsOut[17]: 2
循环行列表数据
In [18]: for i in range(table.nrows): ...: print(table.row_values(i)) ...:['netcon', 'conw.net']
单元格
#根据行列的位置去单元格的数据In [19]: cell_a1 = table.cell(0,0)In [20]: cell_a1Out[20]: text:'netcon'In [21]: cell_a1.dumpOut[21]: <bound method BaseObject.dump of text:'netcon'>#取出单元格的数值In [22]: cell_a1.valueOut[22]: 'netcon'
使用行列索引
#通过行进行数据的获取In [23]: cell_A1 = table.row(0)In [24]: cell_A1Out[24]: [text:'netcon', text:'conw.net']In [25]: cell_A1[0]Out[25]: text:'netcon'In [27]: cell_A1[0].valueOut[27]: 'netcon'#通过列进行数据的获取In [28]: cell_A1 = table.col(0)[0].valueIn [29]: cell_A1Out[29]: 'netcon'
简单的写入
row = 0col = 0# 类型 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 errorctype = 1 value = '单元格的值'xf = 0 # 扩展的格式化#将‘单元格的’写入到Excel中,使用put_cell写入In [31]: table.put_cell(1,1,1,'单元格的',0)In [32]: table.cell(1,1).valueOut[32]: '单元格的'
赞 (0)