VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > python爬虫 >
  • 读取Excel——xlrd

首先,我们需要理解Excel文件的三层级对象:workbook、sheet、cell。
即:
workbook = xlrd.*
sheet = workbook.*
cell = sheet.cell*

1.xlrd基础接口用法

xlrd各接口用法:
(1) 打开文件

workbook = xlrd.open_workbook('123.xlsx')
  • 1

(2) 获取文件中包含的所有工作表名称

sheets = workbook.sheet_names()
  • 1

(3) 选定工作表

sheet = workbook.sheets()[0]  #通过索引获取
sheet = workbook.sheet_by_index(0)  #通过顺序获取
sheet = workbook.sheet_by_name('sheet1')  #通过表名获取
  • 1
  • 2
  • 3

(4) 获取行数和列数

nrows = sheet.nrows
ncols = sheet.ncols
  • 1
  • 2

(5) 打印“表名”“行数”“列数”

print(sheet.name,sheet.nrows,sheet.ncols)
  • 1

(6) 获取全表数据

for i in range(1,nrows+1):  #对于行,从第一行读取到总行数
  for j in range(1,ncols+1):  #对于列,从第一列读取到总列数
    data = sheet.cell(i-1,j-1).value
  • 1
  • 2
  • 3

Tips1:

for i in range(1,n)

i 的取值为1,2,3……n-1。 当然也可以写成:

for i in range(0,nrows):
  for j in range(0,ncols):
    data = sheet.cell(i,j).value
  • 1
  • 2
  • 3

但我个人更倾向于第一种,因为第一种写法的意义更明确。

Tips2:对于工作表的第一行第一列

data = sheet.cell(0,0).value
  • 1

Tips3:value表示“值”,是否加value决定输出格式。

data = sheet.cell(1,2).value
  • 1

输出如下: 输出为 P--------------------------------------------------------------------------

data = sheet.cell(1,2)
  • 1

输出如下: 输出为 text:‘P’

2.循环读取sheet

代码如下:

workbook = xlrd.open_workbook(fname)
sheets = workbook.sheet_names()  #获取所有工作表名称并形成数组
nsheets = len(sheets)  #得出数组长度

for z in range(1,nsheets+1):
  sheet = workbook.sheet_by_index(z-1)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3.在sheet中定位关键字

代码如下:

global rowst  #定义为全局变量方便其他函数调用
global colst  #定义为全局变量方便其他函数调用

for i in range(1,nrows+1):
  for j in range(1,ncols+1):
    data1 = sheet.cell(i-1,j-1).value
    if (data1=='P')or(data1=='Fp')or(data1=='F'):
      rowst = i
      colst = j
#得到关键字所在单元格坐标(i,j) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

Tips1:

if (data1==‘P’) or (data1==‘Fp’) or (data1==‘F’):

不能写成: if data1 == (‘P’ or ‘Fp’ or ‘F’):

4.在sheet中确定首位关键字

在上面的代码中获得的包含关键字的单元格有很多个,那么如何确定满足条件(所在行列全为P/Fp/F)的首位关键字呢? 我们需要以下两步: ① 判断是否满足条件 ② 一旦满足条件立刻退出循环

代码如下:

count_l = 0
count_col = 0
for l in range(colst,ncols+1):
  data_l = sheet.cell(rowst-1,l-1).value  #读取关键字所在行的数据
  
  if data_l != "":  #如果单元格内容不为空
    count_col+=1  #自加一,统计有数据的单元格个数

    if (data_l=='P') or (data_l=='Fp') or (data_l=='F'):
      count_l+=1  #自加一,统计含有关键字的单元格个数

if count_l == count_col:  #如果两者的数量相等,则可以确定该关键字所在行全为P/Fp/F
      



  

相关教程