jiaozhulhh 发表于 2021-3-26 10:52:00

小白求助两个日期相减出错

1.想从excel读取日期数据,两个日期相减,但是报错,TypeError: '<' not supported between instances of 'str' and 'float',也不知道哪里格式错了
2.假如stime所指向的date是空的话,这种又该如何剔除?
附上源代码:
import xlrd
from datetime import datetime
from xlrd import xldate_as_tuple
#读取Excel文件
workbook = xlrd.open_workbook('D:\pylearning\DG逾期测试数据.xlsx')

#读取Excel文件中的第一个工作表
sheet1=workbook.sheet_by_index(0)

for row in range(1,sheet1.nrows):
    #读取Excel表中的时间,并计算时间间隔
    stime = datetime(xldate_as_tuple(sheet1.cell_value(row,3),0)).strftime('%Y/%m/%d')
    etime = datetime(xldate_as_tuple(sheet1.cell_value(row, 4),0)).strftime('%Y/%m/%d')
    #strptime() 函数根据指定的格式把一个时间字符串解析为时间元组
    start = datetime.strptime(stime,'%Y/%m/%d')
    end = datetime.strptime(etime,'%Y/%m/%d')
    time=(end-start).days; #间隔天数
    print("%d逾期天数:%f天" %(row,time))


   12INT_OVERDUE_DATEDT
ssss2020092820200930
sasa
20200930
aaaa2020092820200930







qq1151985918 发表于 2021-3-26 11:11:58

本帖最后由 qq1151985918 于 2021-3-26 11:41 编辑

你Excel中的日期格式不对



代码改动了很多,你自己对照吧。
import xlrd
from datetime import datetime
from xlrd import xldate_as_tuple

#读取Excel文件
workbook = xlrd.open_workbook('test.xlsx')

#读取Excel文件中的第一个工作表
sheet1=workbook.sheet_by_index(0)

for row in range(1,sheet1.nrows):
    #读取Excel表中的时间,并计算时间间隔
    stime = sheet1.cell(row, 2).value
    etime = sheet1.cell(row, 3).value
    #strptime() 函数根据指定的格式把一个时间字符串解析为时间元组
    if stime != "" and etime != "":
      start = datetime.strptime(stime,'%Y/%m/%d')
      end = datetime.strptime(etime,'%Y/%m/%d')
      time=(end-start).days; #间隔天数
      print("%d逾期天数:%d天" %(row,

jackz007 发表于 2021-3-26 11:23:53

本帖最后由 jackz007 于 2021-3-26 11:25 编辑

      剔除空格
import xlrd
from datetime import datetime
from xlrd import xldate_as_tuple

workbook = xlrd.open_workbook('D:\pylearning\DG逾期测试数据.xlsx')

sheet1=workbook.sheet_by_index(0)

for row in range(1 , sheet1 . nrows):
    if sheet1.cell_value(row , 3) . strip() and sheet1.cell_value(row , 4) . strip():         # 添加此行判断
      stime = datetime(xldate_as_tuple(sheet1.cell_value(row,3),0)).strftime('%Y/%m/%d')
      etime = datetime(xldate_as_tuple(sheet1.cell_value(row, 4),0)).strftime('%Y/%m/%d')
      start = datetime.strptime(stime,'%Y/%m/%d')
      end = datetime.strptime(etime,'%Y/%m/%d')
      time=(end-start).days; #间隔天数
      print("%d逾期天数:%f天" %(row,time))

jiaozhulhh 发表于 2021-3-26 11:54:14

jackz007 发表于 2021-3-26 11:23
剔除空格

非常感谢!

jiaozhulhh 发表于 2021-3-26 11:54:50

qq1151985918 发表于 2021-3-26 11:11
你Excel中的日期格式不对




非常感谢!已经运行成功了
页: [1]
查看完整版本: 小白求助两个日期相减出错