首页 > 解决方案 > 从excel中读取日期作为字符串Python

问题描述

我知道这已被问过几次,但即使我尝试了许多给定的答案,我也无法完全弄清楚我的问题。我正在尝试读取表示为日期的 Excel 单元格,但是当它使用 Python 导入我的程序时,它表示为浮点数。

我的 excel 电子表格中的第四列(即 index=3)包含我试图从浮点数转换为字符串的所有日期。我只是将所有值添加到列表中以对整行执行某些操作,然后将其清除并移至下一行。

我的代码基于以下答案:https ://stackoverflow.com/a/13962976/3480297

这是我正在使用的示例数据(文件):

在此处输入图像描述

import xlrd

workbook = xlrd.open_workbook(file)
worksheet = workbook.sheet_by_name('Sheet1')

num_rows = worksheet.nrows
num_cols = worksheet.ncols
values = []

i = 0
j = 0

while i < num_rows:
    while j < num_cols:
        if j == 3:
            values.append(xlrd.xldate_as_tuple(str(worksheet.cell_value(i, j)), 0))
        else:
            values.append(worksheet.cell_value(i, j))
        j += 1
    j = 0
    i += 1
    values = []

但是,我上面的代码给了我下面的错误,print(xlrd.xldate_as_tuple(str(worksheet.cell_value(i, j)), 0))我不知道为什么。

类型错误:“str”和“float”的实例之间不支持“<”

编辑:

调试后,代码抛出错误 where worksheet.cell_value(i, j) = 43588.0

编辑2:

我删除了围绕 Date 的 str(...) 强制转换为 include:values.append(xlrd.xldate_as_tuple(worksheet.cell_value(i, j)), workbook.datemode)但这会引发错误:

类型错误:xldate_as_tuple() 缺少 1 个必需的位置参数:'datemode'

标签: pythonexcel

解决方案


我认为您不应该将日期转换为字符串。注意我做了一些其他的改变:

  • 使用 for 循环而不是 while 循环
  • 请不要使用单字母 var 名称(例如i, 和j
  • xldate_as_datetime比更有意义xldate_as_tuple

请注意,如果您希望以特定格式显示日期,请尝试strftime

import xlrd

workbook = xlrd.open_workbook(file)
worksheet = workbook.sheet_by_name('Sheet1')

num_rows = worksheet.nrows
num_cols = worksheet.ncols
values = []

for row in range(1, num_rows):
    row_values = []
    for col in range(num_cols):
        if col == 3:
            datetime_ = xldate.xldate_as_datetime(worksheet.cell_value(row, col), workbook.datemode)
            row_values.append(datetime_)
        else:
            row_values.append(worksheet.cell_value(row, col))
    values.append(row_values)

推荐阅读