Python:xlrd从花车辨别date

我想用Python中的xlrd导入包含文本,数字和date的文件。

我尝试了这样的:

if "/" in worksheet.cell_value: do_this else: do_that 

但那是没有用的,因为我发现date被存储为浮动,而不是string。 要将它们转换为datetimetypes,我做了:

 try: get_row = str(datetime.datetime(*xlrd.xldate_as_tuple(worksheet.cell_value(i, col - 1), workbook.datemode))) except: get_row = unicode(worksheet.cell_value(i, col - 1)) 

当单元格包含文本时,我有一个例外。 现在我想把数字和date作为date,因为现在所有的数字都被转换成date。

有任何想法吗?

我想你可以通过更多地使用xlrd中提供的工具来简化这个过程:

 cell_type = worksheet.cell_type(row - 1, i) cell_value = worksheet.cell_value(row - 1, i) if cell_type == xlrd.XL_CELL_DATE: # Returns a tuple. dt_tuple = xlrd.xldate_as_tuple(cell_value, workbook.datemode) # Create datetime object from this tuple. get_col = datetime.datetime( dt_tuple[0], dt_tuple[1], dt_tuple[2], dt_tuple[3], dt_tuple[4], dt_tuple[5] ) elif cell_type == xlrd.XL_CELL_NUMBER: get_col = int(cell_value) else: get_col = unicode(cell_value) 

那么,没关系,我find了一个解决scheme,在这里!

 try: cell = worksheet.cell(row - 1, i) if cell.ctype == xlrd.XL_CELL_DATE: date = datetime.datetime(1899, 12, 30) get_ = datetime.timedelta(int(worksheet.cell_value(row - 1, i))) get_col2 = str(date + get_)[:10] d = datetime.datetime.strptime(get_col2, '%Y-%m-%d') get_col = d.strftime('%d-%m-%Y') else: get_col = unicode(int(worksheet.cell_value(row - 1, i))) except: get_col = unicode(worksheet.cell_value(row - 1, i)) 

有一点解释:事实certificate,使用xlrd,你实际上可以检查一个单元格的types,并检查它是否是一个date。 此外,Excel似乎有一个奇怪的方法来节省一天的时间。 它将它们保存为浮点数(左边部分为几天,右边部分为几小时),然后它需要一个特定的date(1899年,12,30,似乎工作正常),并添加从浮动date和小时数来创builddate。 所以,为了创build我想要的date,我只是把它们添加了,只保留了10个第一个字母([:10])来摆脱小时(00.00.00或其他…)。 我也改变了days_months-years的顺序,因为在希腊我们使用不同的顺序。 最后,这段代码还检查它是否可以将一个数字转换为一个整数(我不希望在程序中显示任何浮点数),如果一切都失败了,它只是使用这个单元格(如果有的话)在单元格中的string…)。 我希望你觉得有用,我想还有其他的线索说这是不可能的或者是…