python读写excel文件,python扩展库xlwt支持对excel
与xlwt相比,xlrd提供的接口更多的是让python读取excel表格。下面文章主要介绍Python使用xlrd模块读取Excel表格的相关信息。通过示例代码非常详细的介绍,有需要的朋友可以参考一下。
00-1010 I .安装xlrd模块3360 II。常用方法:1。导入模块:2。打开文件:3。获取工作表:4。获取表5的汇总数据。批量读取单元格:6。读取特定单元格:7。(0,0)转换成A1:8。数据类型:附件。
目录
1.在mac下打开终端,输入命令:
pip安装xlrd
2.验证安装是否成功:
在mac终端输入python进入python环境,然后输入import xlrd。没有错误表示模块安装成功。
一、安装xlrd模块:
二、常用方法:
导入xlrd
1、导入模块:
x1=xlrd . open _ workbook( data . xlsx )
2、打开文件:
获取所有工作表名称:x1.sheet_names()获取工作表数量:x1.nsheets获取所有工作表对象:x1.sheets()按工作表名称查找:x1.sheet_by_name(test )按索引查找:x1 . sheet _ by _ index(3)#-*-coding 3360 utf
导入xlrd
导入操作系统
filename=demo.xlsx
file path=OS . path . join(OS . getcwd(),filename)
打印文件路径
# 1,打开文件
x1=xlrd.open_workbook(文件路径)
# 2.获取工作表对象
Print sheet _ names: ,x1.sheet _ names () #获取所有工作表名称
Print sheet _ number: ,x1.nshheets #获取页数
Print sheet _ object3360 ,x1.sheets () #获取所有工作表对象
Print by _ name3360 ,x1.sheet _ by _ name (test) #按工作表名称查找
Print by _ index3360 ,x1.sheet _ by _ index (3) #按索引查找
输出:
sheet_names: [u plan ,uteam building ,umodile ,utest]
sheet_number: 4
sheet _ object :[位于0x10244c190的xlrd.sheet.Sheet对象,位于0x10244c150的xlrd.sheet.Sheet对象,位于0x10244c110的xlrd.sheet.Sheet对象,位于0x10244c290的xlrd.sheet.Sheet对象]
位于0x10244c290的By_name: xlrd.sheet.Sheet对象
位于0x10244c290的By_index: xlrd.sheet.Sheet对象
3、获取sheet:
获取sheet名:sheet1.name
# -*- coding:utf-8 -*-import xlrd
import os
from datetime import date,datetime
filename = "demo.xlsx"
filePath = os.path.join(os.getcwd(), filename)
print filePath
# 打开文件
x1 = xlrd.open_workbook(filePath)
# 获取sheet的汇总数据
sheet1 = x1.sheet_by_name("plan")
print "sheet name:", sheet1.name # get sheet name
print "row num:", sheet1.nrows # get sheet all rows number
print "col num:", sheet1.ncols # get sheet all columns number
输出:
sheet name: planrow num: 31
col num: 11
5、单元格批量读取:
a)行操作:
- sheet1.row_values(0) # 获取第一行所有内容,合并单元格,首行显示值,其它为空。
- sheet1.row(0) # 获取单元格值类型和内容
- sheet1.row_types(0) # 获取单元格数据类型
# -*- coding:utf-8 -*-import xlrd
import os
from datetime import date,datetime
filename = "demo.xlsx"
filePath = os.path.join(os.getcwd(), filename)
x1 = xlrd.open_workbook(filePath)
sheet1 = x1.sheet_by_name("plan")
# 单元格批量读取
print sheet1.row_values(0) # 获取第一行所有内容,合并单元格,首行显示值,其它为空。
print sheet1.row(0) # 获取单元格值类型和内容
print sheet1.row_types(0) # 获取单元格数据类型
输出:
[ulearning plan, u, u, u, u, u, u, u, 123.0, 42916.0, 0][text:ulearning plan, empty:u, empty:u, empty:u, empty:u, empty:u, empty:u, empty:u, number:123.0, xldate:42916.0, bool:0]
array(B, [1, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4])
b) 表操作
- sheet1.row_values(0, 6, 10) # 取第1行,第6~10列(不含第10表)
- sheet1.col_values(0, 0, 5) # 取第1列,第0~5行(不含第5行)
- sheet1.row_slice(2, 0, 2) # 获取单元格值类型和内容
- sheet1.row_types(1, 0, 2) # 获取单元格数据类型
# -*- coding:utf-8 -*-import xlrd
import os
from datetime import date,datetime
filename = "demo.xlsx"
filePath = os.path.join(os.getcwd(), filename)
print filePath
# 1、打开文件
x1 = xlrd.open_workbook(filePath)
sheet1 = x1.sheet_by_name("plan")
# 列操作
print sheet1.row_values(0, 6, 10) # 取第1行,第6~10列(不含第10表)
print sheet1.col_values(0, 0, 5) # 取第1列,第0~5行(不含第5行)
print sheet1.row_slice(2, 0, 2) # 获取单元格值类型和内容,同sheet1.row(0)
print sheet1.row_types(1, 0, 2) # 获取单元格数据类型
输出:
[u, u, 123.0, 42916.0][ulearning plan, u\u7f16\u53f7, 1.0, 2.0, 3.0]
[number:1.0, text:u\u7ba1\u7406\u5b66\u4e60]
array(B, [1, 1])
6、特定单元格读取:
a) 获取单元格值:
- sheet1.cell_value(1, 2)
- sheet1.cell(1, 2).value
- sheet1.row(1)[2].value
b) 获取单元格类型:
- sheet1.cell(1, 2).ctype
- sheet1.cell_type(1, 2)
- sheet1.row(1)[2].ctype
# -*- coding:utf-8 -*-import xlrd
import os
from datetime import date,datetime
filename = "demo.xlsx"
filePath = os.path.join(os.getcwd(), filename)
x1 = xlrd.open_workbook(filePath)
sheet1 = x1.sheet_by_name("plan")
# 特定单元格读取
# 取值
print sheet1.cell_value(1, 2)
print sheet1.cell(1, 2).value
print sheet1.row(1)[2].value
#取类型
print sheet1.cell(1, 2).ctype
print sheet1.cell_type(1, 2)
print sheet1.row(1)[2].ctype
7、(0,0)转换A1:
- xlrd.cellname(0, 0) # (0,0)转换成A1
- xlrd.cellnameabs(0, 0) # (0,0)转换成$A$1
- xlrd.colname(30) # 把列由数字转换为字母表示
# -*- coding:utf-8 -*-import xlrd
import os
filename = "demo.xlsx"
filePath = os.path.join(os.getcwd(), filename)
# 打开文件
x1 = xlrd.open_workbook(filePath)
sheet1 = x1.sheet_by_name("plan")
# (0,0)转换成A1
print xlrd.cellname(0, 0) # (0,0)转换成A1
print xlrd.cellnameabs(0, 0) # (0,0)转换成$A$1
print xlrd.colname(30) # 把列由数字转换为字母表示
输出:
A1$A$1
AE
8、数据类型:
- 空:0
- 字符串:1
- 数字:2
- 日期:3
- 布尔:4
- error:5
附:写一个自动获取excel表内容的类
本代码已实现自动转换单元格数据类型,不会发生整形数字以浮点数显示,布尔型True或False显示为1,0;日期时间显示为一连串的小数问题
import xlrdfrom xlrd import xldate_as_tuple
import datetime
xlrd中单元格的数据类型
数字一律按浮点型输出,日期输出成一串小数,布尔型输出0或1,所以我们必须在程序中做判断处理转换
成我们想要的数据类型
0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
class ExcelData():
# 初始化方法
def __init__(self, data_path, sheetname):
#定义一个属性接收文件路径
self.data_path = data_path
# 定义一个属性接收工作表名称
self.sheetname = sheetname
# 使用xlrd模块打开excel表读取数据
self.data = xlrd.open_workbook(self.data_path)
# 根据工作表的名称获取工作表中的内容(方式①)
self.table = self.data.sheet_by_name(self.sheetname)
# 根据工作表的索引获取工作表的内容(方式②)
# self.table = self.data.sheet_by_name(0)
# 获取第一行所有内容,如果括号中1就是第二行,这点跟列表索引类似
self.keys = self.table.row_values(0)
# 获取工作表的有效行数
self.rowNum = self.table.nrows
# 获取工作表的有效列数
self.colNum = self.table.ncols
# 定义一个读取excel表的方法
def readExcel(self):
# 定义一个空列表
datas = []
for i in range(1, self.rowNum):
# 定义一个空字典
sheet_data = {}
for j in range(self.colNum):
# 获取单元格数据类型
c_type = self.table.cell(i,j).ctype
# 获取单元格数据
c_cell = self.table.cell_value(i, j)
if c_type == 2 and c_cell % 1 == 0: # 如果是整形
c_cell = int(c_cell)
elif c_type == 3:
# 转成datetime对象
date = datetime.datetime(*xldate_as_tuple(c_cell,0))
c_cell = date.strftime(%Y/%d/%m %H:%M:%S)
elif c_type == 4:
c_cell = True if c_cell == 1 else False
sheet_data[self.keys[j]] = c_cell
# 循环每一个有效的单元格,将字段与值对应存储到字典中
# 字典的key就是excel表中每列第一行的字段
# sheet_data[self.keys[j]] = self.table.row_values(i)[j]
# 再将字典追加到列表中
datas.append(sheet_data)
# 返回从excel中获取到的数据:以列表存字典的形式返回
return datas
if __name__ == "__main__":
data_path = "ttt.xlsx"
sheetname = "Sheet1"
get_data = ExcelData(data_path, sheetname)
datas = get_data.readExcel()
print(datas)
总结
到此这篇关于python使用xlrd模块读取excel的文章就介绍到这了,更多相关python xlrd读取excel内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。