Python:在某些上下文中,不能对日期时间对象执行.date()函数

时间:2016-08-20 21:06:12

标签: python python-2.7 datetime openpyxl python-datetime

我正在解析Excel电子表格并遇到日期格式问题。列AS是字符串,列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

0 个答案:

没有答案