Python | xlrd模块-读Excel文件

 Python操作Excel文件有三种方法

  • 第三方库 xlwt/xlrd:用于生成和读取比较老的excel文件,比如xls格式,最大行数限制为65536行。其中xlrd是读excel,xlwt是写excel的库。
  • 第三方库 openpyxl:用于生成2010之后新的excel文件,比如xlsx格式,最大行数限制为1048576行
  • 第三方库 pandas:pandas是最强大的数据分析库,自带excel读取和生成模块

本文主要介绍xlrd模块

一、前置
1. 安装
  • python官网下载http://pypi.python.org/pypi/xlrd模块安装,前提是已经安装了python 环境
  • 或者在cmd窗口  pip install  xlrd
  Python xlrd模块最新版本不支持.xlsx文件的解决办法   由于xlrd新的模块(2.0.1版本)已不支持.xlsx文件,因此需要卸载当前版本的xlrd库,安装1.2.0版本即可
  • pip uninstall xlrd # 卸载当前版本
  • pip install xlrd==1.2.0 # 安装1.2.0版本
2. 单元格的数据类型
  • 空(empty):0
  • 字符串:1
  • 数字:2
  • 日期:3
  • 布尔:4
  • error:5
  • 空白表格(blank):6
 
二、操作
  • 1.导入xlrd模块
  • 2.打开Excel完成实例化
  • 3.通过下标获取对应的表(也可通过标明获取)
  • 4.通过列、行或者坐标获取表格的数据
 
1. 导入模块
import xlrd

2. 打开文件
data = xlrd.open_workbook(filename)
# 文件名以及路径,如果路径或者文件名有中文给前面加一个r原生字符。

# 打印 data = <xlrd.book.Book object at 0x035C97D0> 返回一个对象
3. sheet的操作

3-1. 获取book中的sheet
table_0 = data.sheets()
table_1 = data.sheet_by_index(0)
table_2 = data.sheet_by_name("userService")
table_3 = data.sheet_names()
table_4 = data.sheet_loaded(0)
table_5 = data.nsheets

print("获取所有sheet对象:",table_0)
print("通过索引获取sheet对象:", table_1)
print("打印sheet名称获取sheet对象:", table_2)
print("获取所有sheet名称:", table_3)
print("检查sheet是否导入完毕:", table_4)
print("获取sheet数量:",table_5)

### 打印结果 ###
获取所有sheet对象: [<xlrd.sheet.Sheet object at 0x038E1ED0>, <xlrd.sheet.Sheet object at 0x038ED890>, <xlrd.sheet.Sheet object at 0x038ED4D0>]
通过索引获取sheet对象: <xlrd.sheet.Sheet object at 0x038E1ED0>
打印sheet名称获取sheet对象: <xlrd.sheet.Sheet object at 0x038E1ED0>
获取所有sheet名称: ['userService', 'devService', 'powerStationService']
检查sheet是否导入完毕: True
获取sheet数量: 3

3-2. 获取sheet的汇总数据
table_1 = data.sheet_by_index(0)
table_6 = table_1.name
table_7 = table_1.nrows
table_8 = table_1.ncols

print("获取第一个sheet名称:" ,table_6)
print("获取第一个sheet总行数:",table_7)
print("获取第一个sheet总列数:",table_8)

### 打印结果 ###
获取第一个sheet名称: userService
获取第一个sheet总行数: 9
获取第一个sheet总列数: 13

4. 行的操作
data = xlrd.open_workbook(filename)
table = data.sheet_by_name("userService")

row_1 = table.row_values(0)
row_2 = table.nrows
row_3 = table.row_len(0)
row_4 = table.row(0)
row_5 = table.row_slice(0)
row_6 = table.row_types(0)

print("获取第一行所有内容,返回列表:",row_1)
print("获取该sheet中的有效行数:",row_2)
print("获取该sheet中第一行的单元格长度:",row_3)
print("获取该列所有单元格值类型和内容组成的列表:",row_4)
print("获取该列所有单元格值类型和内容组成的列表:",row_5)
print("获取单元格数据类型:",row_6)

### 打印结果 ###
获取第一行所有内容,返回列表: ['用例编号', '模块', '接口名称', '优先级', '标题', 'URL', '前置条件', '请求方式', '请求头', '请求参数', '预期结果', '响应预期结果', '实际结果']
获取该sheet中的有效行数: 9
获取该sheet中第一行的单元格长度: 13
获取该列所有单元格值类型和内容组成的列表: [text:'用例编号', text:'模块', text:'接口名称', text:'优先级', text:'标题', text:'URL', text:'前置条件', text:'请求方式', text:'请求头', text:'请求参数', text:'预期结果', text:'响应预期结果', text:'实际结果']
获取该列所有单元格值类型和内容组成的列表: [text:'用例编号', text:'模块', text:'接口名称', text:'优先级', text:'标题', text:'URL', text:'前置条件', text:'请求方式', text:'请求头', text:'请求参数', text:'预期结果', text:'响应预期结果', text:'实际结果']
获取单元格数据类型: array('B', [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])

5. 列的操作
data = xlrd.open_workbook(filename)
table = data.sheet_by_name("userService")

col_1 = table.col_values(0, start_rowx=0, end_rowx=None) 
col_2 = table.ncols 
col_3 = table.col(0, start_rowx=0, end_rowx=None)  
col_4 = table.col_slice(0, start_rowx=0, end_rowx=None) 
col_5 = table.col_types(0, start_rowx=0, end_rowx=None) 

print("获取该列中所有单元格的数据组成的列表",col_1)
print("获取列表的有效列数",col_2)
print("获取该列中所有的单元格对象组成的列表",col_3)
print("获取该列中所有的单元格对象组成的列表",col_4)
print("获取该列中所有单元格的数据类型组成的列表",col_5)

### 打印结果 ###
获取该列中所有单元格的数据组成的列表 ['用例编号', 'login001', 'login002', 'login003', 'login004', 'login005', 'login006', 'getPsUser001', 'checkUserPassword001']
获取列表的有效列数 13
获取该列中所有的单元格对象组成的列表 [text:'用例编号', text:'login001', text:'login002', text:'login003', text:'login004', text:'login005', text:'login006', text:'getPsUser001', text:'checkUserPassword001']
获取该列中所有的单元格对象组成的列表 [text:'用例编号', text:'login001', text:'login002', text:'login003', text:'login004', text:'login005', text:'login006', text:'getPsUser001', text:'checkUserPassword001']
获取该列中所有单元格的数据类型组成的列表 [1, 1, 1, 1, 1, 1, 1, 1, 1]

6. 单元格操作
data = xlrd.open_workbook(filename)
table = data.sheet_by_name("userService")

cell_1 = table.cell_value(0,0)
cell_2 = table.cell(0,0)
cell_3 = table.cell_type(0,0)

print("获取单元格中的数据",cell_1)
print("获取单元格对象",cell_2)
print("获取单元格中的数据类型",cell_3)

### 打印结果 ###
获取单元格中的数据 用例编号
获取单元格对象 text:'用例编号'
获取单元格中的数据类型 1

7. 补充
data = xlrd.open_workbook(filename)
table = data.sheet_by_name("userService")

row_1 = table.row_values(0, 6, 10)   # 取第1行,第6~10列(不含第10表),从0开始
col_1 = table.col_values(0, 0, 5)    # 取第1列,第0~5行(不含第5行)
row_2 = table.row_slice(2, 0, 2)     # 获取单元格值类型和内容
row_3 = table.row_types(1, 0, 2)     # 获取单元格数据类型

print(row_1)
print(col_1)
print(row_2)
print(row_3)

### 打印结果 ###
['前置条件', '请求方式', '请求头', '请求参数']
['用例编号', 'login001', 'login002', 'login003', 'login004']
[text:'login002', text:'userService']
array('B', [1, 1])

 

三、对批量的xcel进行操作

import os
import xlrd

def get_all_excel():
    path_1 = os.path.dirname(os.path.abspath(__file__))
    path = os.path.join(path_1,'excel_file')
    all_file = []
    all_sn_data =[]
    for fi in os.listdir(path):
        f_name = os.path.join(path,fi)
        all_file.append(f_name)
    print(all_file)        #所有文件的列表

    for file in all_file:
        if os.path.isfile(file):
            data = xlrd.open_workbook(file)
            table = data.sheet_by_index(0)     # 第一个sheet
            sn_data = table.col_values(0)        # A列数据
            all_sn_data.append(sn_data)
            all_data = sum(all_sn_data,[])       # 列表扁平化
    print(all_data)
get_all_excel()

 

 

posted @ 2022-04-29 17:04  卷毛七号  阅读(523)  评论(0编辑  收藏  举报