преобразовать xldate в дату и время python

У меня проблема с преобразованием excel xldate в python datetime со следующим кодом. Это правильный способ конвертации?

import xlrd
from datetime import datetime

book = xlrd.open_workbook("a.xls")
sh = book.sheet_by_index(0)
for rx in range(1,sh.nrows):
    a = sh.row(rx)
    print a  
    year, month, day, hour, minute = xlrd.xldate_as_tuple(a[0], book.datemode)
    py_date = datetime.datetime(year, month, day, hour, minute)

печатается -->

   [xldate:40544.0, number:0.0, number:75.49847785316135, number:75.6401124106301]

Ниже показана ошибка

  year, month, day, hour, minute = xlrd.xldate_as_tuple(a[0], book.datemode)

  File "C:\Anaconda\Lib\site-packages\xlrd\xldate.py", line 67, in xldate_as_tuple
    xldays = int(xldate)
  TypeError: int() argument must be a string or a number, not 'Cell'

person twfx    schedule 24.09.2014    source источник
comment
Разве это не должно быть a[0].value?   -  person jonrsharpe    schedule 24.09.2014
comment
ValueError: слишком много значений для распаковки   -  person twfx    schedule 24.09.2014
comment
Не выделяйте ответы в вопросе; вы можете ответить на свой вопрос, если вы разберетесь с этим в то же время.   -  person jonrsharpe    schedule 24.09.2014


Ответы (2)


a[0] – это xlrd.Cell, поэтому вам нужно использовать a[0].value для доступа содержимое ячейки.

Кроме того, вы не можете распаковать в year, month, day, hour, minute, потому что в создаваемом кортеже более пяти значений (как насчет second?). Однако этого можно избежать, используя распаковку кортежа (см., например, Что делают ** (двойная звездочка) и * (звездочка) для параметров?) вместо временных переменных:

py_date = datetime.datetime(*xlrd.xldate_as_tuple(a[0].value,
                                                  book.datemode))
person jonrsharpe    schedule 24.09.2014

Принятый ответ @jonrsharpe работает хорошо. Но это чище:

py_date = xlrd.xldate.xldate_as_datetime(a[0].value, book.datemode)
person dopstar    schedule 29.07.2015