Python xlrd";“年份超出范围”;错误,xldate作为元组
我试图使用Python xlrd";“年份超出范围”;错误,xldate作为元组,python,xlrd,Python,Xlrd,我试图使用xldate\u as\u tuple函数将电子表格中两个单独单元格中的datetime和time值转换为python datetime和time。我打算将当前分离的值组合成一个python日期时间值,以便稍后在代码中使用 我可以获取要转换的日期行值,但时间字段有问题。我认为这取决于excel中时间单元格的格式 在我的情况下,电子表格中的时间字段采用以下格式: 00/01/1900 16:47或00/01/1900 17:06。我感兴趣的是时间(即不是00/01/1900位)。想想看,
xldate\u as\u tuple
函数将电子表格中两个单独单元格中的datetime和time值转换为python datetime和time。我打算将当前分离的值组合成一个python日期时间值,以便稍后在代码中使用
我可以获取要转换的日期行值,但时间字段有问题。我认为这取决于excel中时间单元格的格式
在我的情况下,电子表格中的时间字段采用以下格式:
00/01/1900 16:47或00/01/1900 17:06。我感兴趣的是时间(即不是00/01/1900位)。想想看,日期的'00'位不是一个月中的有效日期,所以我想这就是我的问题所在
思想被视为获得时间价值的最佳途径。如果<代码> XLDATEYASHUTUPLE <代码>将不适用于我的情况,那么我是否应该考虑如何将单元格中的值作为文本并解析它?
Cheers
xldate\u as\u tuple
如广告所示,产生(年、月、日、时、分、秒)tuple。问题在于您对该元组所做的操作,在您的示例中,每年、每月和每天都将有0
简短答复:
如果需要时间值,请调用datetime.time
,而不是datetime.datetime
长答覆:
打开Excel。在单元格A1中,键入16:47:00
。将其复制到B1和C1中。使用自定义格式格式化B1yyyy-mm-dd hh:mm:ss
。您应该看到1900-01-00 16:47:00
。在单元格D1中键入=(16+47/60)/24
,然后将C1和D1格式化为带8位小数的数字。您应该在C1和D1中看到0.699305556
启动xlrd
并尝试xlrd.xldate\u as\u元组
:
>>> import xlrd
>>> b = xlrd.open_workbook('xlrd_time.xls')
>>> s = b.sheet_by_index(0)
>>> s.row_values(0)
[0.6993055555555556, 0.6993055555555556, 0.6993055555555556, 0.6993055555555556]
>>> [xlrd.xldate_as_tuple(t, 0) for t in s.row_values(0)]
[(0, 0, 0, 16, 47, 0), (0, 0, 0, 16, 47, 0), (0, 0, 0, 16, 47, 0), (0, 0, 0, 16, 47, 0)]
>>>
将您每天的零头放入datetime
模块区域:您的数据要么是一天中的某个时间,要么是一个持续时间(“timedelta”),因此:
您的数据不是“日期时间”;尝试创建日期时间将失败,因为您发现:
>>> datetime.datetime(*x)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: year is out of range
>datetime.datetime(*x)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:年份超出范围
>>> datetime.datetime(*x)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: year is out of range