python读取excel时间数据遇到的问题
要读取的excel里面的时间数据是这样的。写入excel的时候是时间的格式,但是读取出来是一串数字,整数部分是五位。依照其他的教程应该是10位或者13位。我要实现的功能是检查excel有没有更新,如果有更新,则读取excel最新的更新内容,发送邮件。其中读取excel最新时间数据的时候发现读取的是一串数字,并且用网上的方法都行不通。数字是这样的:44193.688125折腾了大半天,上最后我的解决
·
要读取的excel里面的时间数据是这样的。写入excel的时候是时间的格式,但是读取出来是一串数字,整数部分是五位。依照其他的教程应该是10位或者13位。
我要实现的功能是检查excel有没有更新,如果有更新,则读取excel最新的更新内容,发送邮件。
其中读取excel最新时间数据的时候发现读取的是一串数字,并且用网上的方法都行不通。
数字是这样的: 44193.688125
折腾了大半天,上最后我的解决方案。
errtime = str(pd.to_datetime('1900-01-01') + pd.Timedelta(errtime + 'D')).split(".")[0]
输出是:
'2020-12-28 17:01:35'
因为搜索了excel存储时间格式的问题, 发现起始时间是 '1900-01-01', 但是用1900-01-01算起来又是差了两天,所以我在原始的数字上面减去2,才是正确的时间。
以下是整体的代码:
import os
import xlrd
import pandas as pd
from send_email import *
last_update = os.path.getmtime("G:\expert system data\Machine Database.xls")
while os.path.exists("G:\expert system data"):
new_update = os.path.getmtime("G:\expert system data\Machine Database.xls")
if new_update > last_update:
workbook = xlrd.open_workbook("G:\expert system data\Machine Database.xls")
ws = workbook.sheet_by_index(0)
rowNum = ws.nrows
#Name, time, tester, detail
errname = ws.cell(rowNum - 1, 2).value
errtime = ws.cell(rowNum - 1, 3).value
tester = ws.cell(rowNum - 1, 0).value
detail = ws.cell(rowNum - 1, 4).value
errtime = str(errtime - 2)
errtime = str(pd.to_datetime('1900-01-01') + pd.Timedelta(errtime + 'D')).split(".")[0]
try:
action_time = ws.cell(rowNum - 1, 8).value
action_time = str(action_time - 2)
action_time = str(pd.to_datetime('1900-01-01') + pd.Timedelta(action_time + 'D')).split(".")[0]
except:
action_time = "No action"
continue
send_email(errname, errtime, tester, detail, action_time)
last_update = new_update
尝试过的方法有这么一大堆:
"""
workbook = xlrd.open_workbook("G:\expert system data\Machine Database.xls")
ws = workbook.sheet_by_index(0)
rowNum = ws.nrows
#Name, time, tester, detail
errname = ws.cell(rowNum-1, 2).value
errtime = ws.cell(rowNum-1,3).value
tester = ws.cell(rowNum-1,0).value
detail = ws.cell(rowNum-1,4).value
action_time = ws.cell(rowNum-1,8).value
errtime = str(errtime-2)
action_time = str(action_time-2)
date = errtime.split(".")[0]
time1 = errtime.split(".")[1]
#errtime = datetime.strptime(str(errtime), '%Y-%m-%d %H:%M:%S').strftime('%Y-%m-%d %H:%M:%S')
#errtime = time.strftime('%Y-%m-%d %H:%M:%S', errtime)
#errtime = datetime.strptime(datetime.fromtimestamp(errtime).strftime("%Y-%m-%d %H:%M:%S"), "%Y-%m-%d %H:%M:%S")
#real_date = pd.to_datetime('1970-01-01')+ pd.Timedelta(errtime+'D')
#a = pd.Timestamp('2020-12-29 20:16:33') + pd.to_timedelta(errtime, unit='S').ceil('S')
#print(errname, errtime,tester, detail, action_time)
#print(type(errtime))
#print(date, time1)
#print(rowNum)
#print(real_date)
errtime = pd.to_datetime('1900-01-01') + pd.Timedelta(errtime+'D')
action_time = pd.to_datetime('1900-01-01') + pd.Timedelta(action_time+'D')"""
走过的歪路: 查找网上说起始时间是1970-01-01,实际不是,自己算一算就知道了。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献3条内容
所有评论(0)