我知道这已被问过几次,但即使我尝试了许多给定的答案,我也无法完全弄清楚我的问题。我正在尝试读取表示为日期的 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))
处给了我以下错误我不知道为什么。TypeError: '<' not supported between instances of 'str' and 'float'
编辑:
调试后,代码抛出错误 where worksheet.cell_value(i, j) = 43588.0
EDIT2:
我删除了围绕日期的 str(...) 强制转换以包括:
values.append(xlrd.xldate_as_tuple(worksheet.cell_value(i, j)), workbook.datemode)
但这会引发错误:TypeError: xldate_as_tuple() missing 1 required positional argument: 'datemode'
最佳答案
我认为您不应该将日期转换为字符串。注意我做了一些其他的改变:
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)
关于python - 从excel中读取日期作为字符串Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60506776/