python爬取多个Excel数据时出现问题

数据读取时一直都会报错,下面第一张图是最新修改之后的报错,然后是源码

img

img

【相关推荐】



  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7594342
  • 这篇博客你也可以参考下:使用python对两个Excel表进行数据比较,得到差异和相同的数据行。
  • 您还可以看一下 尹国艳老师的python办公自动化Excel操作课程中的 学会本教程能做什么小节, 巩固相关知识点
  • 除此之外, 这篇博客: python统计excel数据,停车系统有效时长中的 得到每一列的车辆进出时间,并计算时间差 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    查看表格发现:进场时间和出场时间分别在第8列和第9列。

    def calculate_data(sheet, row):
        enter_time = sheet.cell_value(row,8)	#得到进场时间
        exit_time = sheet.cell_value(row,9)		#得到出场时间
        if enter_time == '' or exit_time == '':		#某些行为空,为空直接跳过
            return datetime.timedelta(hours=0)
    #因为得到的都是string,需要转换为datetime便于统计时间差
    #start_20为入场当前的20点的时间
        start_20 = datetime.datetime.strptime(enter_time[:10], "%Y-%m-%d") + datetime.timedelta(hours=20)
    #start_10为入场当前的10点的时间
        start_10 = datetime.datetime.strptime(enter_time[:10], "%Y-%m-%d") + datetime.timedelta(hours=10)
    #end_20为出场当前的20点的时间
        end_20 = datetime.datetime.strptime(exit_time[:10], "%Y-%m-%d") + datetime.timedelta(hours=20)
    #end_10为出场当前的10点的时间
        end_10 = datetime.datetime.strptime(exit_time[:10], "%Y-%m-%d") + datetime.timedelta(hours=10)
    #enter_time 入场时间
        enter_time = datetime.datetime.strptime(enter_time, "%Y-%m-%d %H:%M:%S")
    #exit_time 出场时间
        exit_time = datetime.datetime.strptime(exit_time, "%Y-%m-%d %H:%M:%S")
        result = None
    #delta 为入场时间和出场时间(不考虑时分秒)的时间差,单位天,便于后续的计算
        a = exit_time - datetime.timedelta(hours=exit_time.hour, minutes=exit_time.minute, seconds=exit_time.second)
        b = enter_time - datetime.timedelta(hours=enter_time.hour, minutes=enter_time.minute, seconds=enter_time.second)
        delta = (a - b).total_seconds()/86400
    #后续的条件判断就是计算特定时间内的停车时长,有兴趣可以看看,没兴趣可以直接略过,最后返回一个result计算每行的时间差
        if enter_time < start_10:
            if exit_time < end_10:
                result = exit_time - enter_time - datetime.timedelta(hours=10*delta)
            elif exit_time > end_20:
                result = exit_time - enter_time - datetime.timedelta(hours=10*delta+10)
            else:
                result = start_10 - enter_time + datetime.timedelta(hours=14*delta)
        elif enter_time > start_20:
            if exit_time < end_10:
                result = exit_time - enter_time - datetime.timedelta(hours=10*delta-10)
            elif exit_time > end_20:
                result = exit_time - enter_time - datetime.timedelta(hours=10*delta)
            else:
                result = end_10 - enter_time - datetime.timedelta(hours=10*delta-10)
        else:
            if exit_time < end_10:
                result = exit_time - start_20 - datetime.timedelta(hours=10*delta-10)
            elif exit_time > end_20:
                result = exit_time - start_20 - datetime.timedelta(hours=10*delta)
            else:
                result = datetime.timedelta(hours=14*delta)
        return result
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^