suki Sukinb sukinb 2023-09-14 14:28 采纳率: 0%
浏览 8

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

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

img

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-14 16:34
    关注

    【相关推荐】



    • 这有个类似的问题, 你可以参考下: 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
      

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

报告相同问题?

问题事件

  • 创建了问题 9月14日