当我使用xlrd包从Excel文件中读取日期时,导入的数据不是日期,而是像32509.0
这样的数字。
Excel输入数据为1989-01-01
之类的日期。
代码:
import xlrd
import mysql.connector
import datetime
name= "Anand1989.xls"
book=xlrd.open_workbook(name)
worksheet = book.sheet_by_index(0)
database = mysql.connector.connect (host="localhost", user = "root", passwd = "", db = "rainfall")
cursor = database.cursor()
query = """INSERT INTO Anand1989(DATE) VALUES (%s)"""
for r in range(1, worksheet.nrows):
DATE = worksheet.cell(r,0).value
date_time_obj = datetime.datetime.strptime(str(DATE), '%Y-%m-%d').date
values = (date_time_obj)
cursor.execute(query, values)
cursor.close()
database.commit()
database.close()
print ("All Done! Bye, for now.")
Traceback (most recent call last):
File "newins.py", line 46, in <module> date_time_obj = datetime.datetime.strptime(str(DATE), '%Y-%m-%d').date
File "C:\Users\student\AppData\Local\Programs\Python\Python37-32\lib\_strptime.py", line 577, in _strptime_datetimet tt, fraction,gmtoff_fraction = _strptime(data_string, format)
File "C:\Users\student\AppData\Local\Programs\Python\Python37-32\lib\_strptime.py", line 359, in _strptime (data_string, format)) ValueError: time data '32509.0' does not match format '%Y-%m-%d'
答案 0 :(得分:0)
在Excel中,日期是数字,等于1/1/1900,等于1。因此,数字32509表示对应于1/1/1900或1/1/1989之后的32508天的日期(小数部分对应于时间)。
您可以使用xlrd.xldate.xldate_as_tuple(ExcelDate,datemode)
其中:
ExcelDate:代表日期时间的十进制数字。
datemode为0:基于1900或1:基于1904(在这种情况下应为0)
并返回格式(年,月,日,小时,分钟,最近的秒)的元组