【发布时间】:2018-01-18 15:39:53
【问题描述】:
作为一个更大的程序的一部分,我有 2 个函数,我想在下面强调一下:
def compare_date(date1,date2):
date_tm_obj_url = datetime.strptime(date1, check_url_datefmt(date1))
date_tm_obj_usr = datetime.strptime(date2, '%b %d %Y %I:%M %p')
return (date_tm_obj_url > date_tm_obj_usr)
compare_date 旨在比较 2 个日期时间对象(日期)并检查哪个比另一个更新。其中一个日期是从网页中抓取出来的,另一个是从用户那里得到的(程序运行时,它会询问用户日期)
网页上的日期格式为Submitted Jan 15th 2018 11:03 PM by。但是为了管理1st、2nd、3rd 和nth 等情况的格式会有所不同的情况,我编写了另一个函数check_url_datefmt(date1),compare_date 调用:
def check_url_datefmt(date):
print (str(date))
fmt_lst=['Submitted %b %dst %Y %I:%M %p by','Submitted %b %dnd %Y %I:%M %p by','Submitted %b %drd %Y %I:%M %p by','Submitted %b %dth %Y %I:%M %p by']
if str(date) == str(fmt_lst[0]):
return 'Submitted %b %dst %Y %I:%M %p by'
elif str(date) == str(fmt_lst[1]):
return 'Submitted %b %dnd %Y %I:%M %p by'
elif str(date) == str(fmt_lst[2]):
return 'Submitted %b %drd %Y %I:%M %p by'
else:
return 'Submitted %b %dth %Y %I:%M %p by'
但我看到所有情况下,它只匹配最后一个else。事实上对于Submitted Jan 3rd 2018 11:03 PM by 的情况,它返回'Submitted %b %dth %Y %I:%M %p by',结果我得到这个错误:
File "C:\python-scripts\url_scraper1.py", line 65, in compare_date
date_tm_obj_url = datetime.strptime(date1, check_url_datefmt(date1))
File "C:\Users\SIDDHARTHA\AppData\Local\Programs\Python\Python36-32\lib\_strptime.py", line 565, in _strptime_datetime
tt, fraction = _strptime(data_string, format)
File "C:\Users\SIDDHARTHA\AppData\Local\Programs\Python\Python36-32\lib\_strptime.py", line 362, in _strptime
(data_string, format))
ValueError: time data 'Submitted Jan 3rd 2018 11:03 PM by' does not match format 'Submitted %b %dth %Y %I:%M %p by'
我做错了什么?如何克服这个问题?
【问题讨论】:
-
在解析之前从字符串中删除
st、nd、rd和th怎么样?然后,您可以为所有字符串使用一个模板。 -
您将
Submitted Jan 3rd 2018 11:03 PM by与Submitted %b %dst %Y %I:%M %p by进行比较,所以它们当然不相等,您总是属于else。 -
@All 感谢您清除错误