Python xlrd读取、处理excel日期类型


一 xlrd基础知识

  1. 载入xlrd模块,并将excel表格导入
import xlrd

data = xlrd.open_workbook('../表格.xls')  # 打开表格
names = data.sheet_names()  # 返回表格中所有表格的名字
table = data.sheets()[0]  # 将表格的第一个sheet存入table变量
  1. 对于表格的简单读取

    其中,x代表行序号,y代表列序号,均是从零开始的非负整数。

cell1 = table.cell_value(x,y)  # 返回单元格的值
row1 = table.row_values(x)  # 返回某一行的元素列表
col1 = table.col_values(y)  # 返回某一列的元素列表

cell2 = table.row_values(x)[y]
cell3 = table.col_values(y)[x]
# 该两行与第一行代码等效,即cell1、cell2与cell内容完全相同 
  1. 可能存在的问题
    报错:Excel xlsx file; not supported
    原因:xlrd模块在1.2.0之后的版本不支持xlsx格式,仅支持xls格式。
    解决方案:
    1)卸载当前版本的xlrd模块,安装早于1.2.0的版本;
    2)将xlsx格式的excel文件另存为xls格式。


二 利用xldate处理日期

  1. 有关excel中日期格式的单元格

    1)实际上以 浮点数 的形式存储在单元格中,并不存在“日期”的数据类型;
    2)存在一个 时间基准(datemode) ,不同的时间基准加上浮点数得到的实际日期不同。在一些函数的参数中,0 代表1900-01-01为基准,1 代表1904-01-01为基准,通常WIndows使用前者,Mac使用后者。

  2. 将以浮点数形式存在的日期数据转换为可读的形式

    1)xlrd.xldate_as_tuple(xldate,datemode) 函数
    参数 xldate:要处理的单元格值(或浮点数)
    参数 datemode:时间基准
    返回值:返回元组(year,month,day,hour,minute,nearest_second)

    2)xlrd.xldate.xldate_as_datetime(xldate,datemode) 函数
    参数 xldate:要处理的单元格值(或浮点数)
    参数 datemode:时间基准
    返回值:datetime对象,格式 year-month-day hour:minute:second
    *注:excel的date对象datetime对象不是同一概念,前者仅仅以 浮点数 的形式存在,并不存在相关的函数或参数,关于后者可以查阅相关的文档说明,在此处不再赘述。

    3)题外话: 关于datetime对象的显示

import xlrd

data = xlrd.open_workbook('../【更新】新闻宣传业务领域志愿者赛时每日到岗、运行情况统计表.xls')  # 打开表格
table = data.sheets()[0]  # 将表格的第一个sheet存入table变量

dt = xlrd.xldate_as_datetime(table.cell_value(56,3),0)
# 用1900年为时间基准,将第0行第3列的单元格值转换为datetime对象

print(type(dt))
print(dt)

print(dt.strftime("%Y/%m/%d"))
print(dt.strftime("%y/%m/%d"))
print(dt.strftime("%x %X"))
print(dt.strftime("%c"))
# 根据一定的格式打印

运行结果如下:
运行结果

日期显示格式与对应的含义:

格式含义备注
%y年份的后两位数字
%Y四位完整的年份
%j该日期是一年当中的第几天范围在001-366之间
%m月份
%b简写英文月份
%B完整英文月份
%d返回是该月的第几日
%H小时24小时制
%I小时12小时制
%p上午或下午AM或者PM
%M分钟
%S秒钟
%x日期日/月/年(注意顺序与习惯相反)
%X时间时:分:秒
%c详细日期时间
  1. 将可读形式的日期转换为浮点数(即excel date)

    1)xlrd.xldate.xldate_from_date_tuple(date_tuple, datemode) 函数
    参数date_tuple:上面第2点的(1)返回值形式的日期元组
    参数datemode:时间基准
    返回值:浮点数

import xlrd

data = xlrd.open_workbook('../统计表.xls')
table = data.sheets()[0]

t = xlrd.xldate_as_tuple(table.cell_value(56,3),0) # 由单元格引入的元组
t1 = xlrd.xldate_as_tuple(44619.0,0)  # 直接由浮点数引入的元组

a = xlrd.xldate.xldate_from_datetime_tuple(t,0)  # 将元组逆处理得到浮点数

print(t)
print(t1)
print(a)
print(type(a))

运行结果如下,注意前后浮点数的对照与呼应:

运行结果


三 参考文章

  1. Excel xlsx file; not supported两种解决办法
  2. xlrd官方文档
  3. 知乎 - Python xlrd读取excel日期类型的2种方法及显示格式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林西河

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值