我正在解析Excel电子表格并遇到日期格式问题。列A
和S
是字符串,列R
是日期。这是我的代码。当我尝试从变量.date()
中的R
列中的datetime对象获取install_date
时会出现此问题。
from openpyxl import load_workbook
from openpyxl.cell import get_column_letter
from datetime import date, datetime
from pprint import pprint
import warnings
warnings.simplefilter("ignore")
wb = load_workbook(filename = 'schedule.xlsx')
warnings.simplefilter("default")
sheet = wb.get_sheet_by_name('Master Schedule')
schedule = {}
for row in range(2, sheet.max_row + 1):
site = str(sheet['A' + str(row)].value)
idate = sheet['R' + str(row)].value
status = str(sheet['S' + str(row)].value)
install_date = idate.date()
sid = "{0}-{1}".format(site,install_date)
if 'Pending' in status:
schedule[sid] = {'site': site, 'install_date': install_date, 'status': status}
else:
pass
如果我运行这个脚本,我会在终端中找到它:
Traceback (most recent call last):
File "sheet.py", line 18, in <module>
install_date = idate.date()
AttributeError: 'str' object has no attribute 'date'
如果我type(idate)
我得到<type 'datetime.datetime'>
,其值为datetime.datetime(2016, 8, 17, 0, 0)
如果我这样做print idate.date()
,我会得到我期望和想要的输出:2016-08-10
。
我在这里缺少什么?我觉得这种类型随意改变了。如果我简化我的脚本并选择要使用的单个特定单元格(例如R251
),我可以在其上执行.date()
函数而不会出现问题。我似乎无法找到在for循环中如何做这样的事情。
编辑:由EngineerCamp解决。我需要重新编写脚本,以便在迭代开始时进行if 'Pending' in status:
检查,因为该列中没有日期的行。新代码:
for row in range(2, sheet.max_row + 1):
status = str(sheet['S' + str(row)].value)
if 'Pending' in status:
site = str(sheet['A' + str(row)].value)
idate = sheet['R' + str(row)].value
install_date = idate.date()
sid = "{0}-{1}".format(site,install_date)
schedule[sid] = {'site': site, 'install_date': install_date, 'status': status}
else:
pass