我有一个问题,使用以下代码将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)
Run Code Online (Sandbox Code Playgroud)
a打印 - >
[xldate:40544.0, number:0.0, number:75.49847785316135, number:75.6401124106301]
Run Code Online (Sandbox Code Playgroud)
显示以下错误
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'
Run Code Online (Sandbox Code Playgroud)
jon*_*rpe 20
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))
Run Code Online (Sandbox Code Playgroud)
dop*_*tar 15
@ jonrsharpe接受的答案很有效.但这更清洁:
py_date = xlrd.xldate.xldate_as_datetime(a[0].value, book.datemode)
Run Code Online (Sandbox Code Playgroud)