python方法将字符串转换为“格式”;11月11日“;约会

python方法将字符串转换为“格式”;11月11日“;约会,python,datetime,scrapy,string-to-datetime,Python,Datetime,Scrapy,String To Datetime,我在scrapy中使用python,收集了一堆以文本字符串形式存储在网页上的日期,如“11月11日”(不提供年份) 我试着用 startdate = '11th November' datetime.strptime(startdate, '%d %B') 但我认为它不喜欢“th”,我得到了一个 值错误:时间数据“11月11日”与格式“%d%B”不匹配 如果我做一个函数,尝试从我计算的日期中删除th,st,rd,nd,它将从该月中删除相同的文本 有没有更好的方法将其转换为日期格式 对于我的使用

我在scrapy中使用python,收集了一堆以文本字符串形式存储在网页上的日期,如“11月11日”(不提供年份)

我试着用

startdate = '11th November'
datetime.strptime(startdate, '%d %B')
但我认为它不喜欢“th”,我得到了一个

值错误:时间数据“11月11日”与格式“%d%B”不匹配

如果我做一个函数,尝试从我计算的日期中删除th,st,rd,nd,它将从该月中删除相同的文本

有没有更好的方法将其转换为日期格式

对于我的使用,它最终需要采用ISO 8601格式YYYY-MM-DD

这样我就可以将它从scrapy传输到数据库,然后在谷歌电子表格中使用它来制作javascript谷歌图表。我之所以提到这一点,是因为可能有一个更好的地方来更改字符串的日期,而不是尝试在python中进行更改

(作为第二个问题,我还需要考虑如何在日期上添加正确的年份,因为如果该日期为1月12日,则意味着2020年1月,而不是2019年1月。这将基于与刮板运行日期的比较,即今天的日期。)

编辑: 事实证明,解决方案还需要解决第二个问题。因此,选择这个问题的最终答案。如果本年度的第二期未解决,则默认为1900年,这是一个问题。

尝试一下-

import datetime
datetime_obj = datetime.datetime.strptime(re.sub(r"\b([0123]?[0-9])(st|th|nd|rd)\b",r"\1", startdate) + " " + str(datetime.datetime.now().year), "%d %B %Y")  

我看不到处理“th”的选项,因此您可能必须处理更改该格式这是否回答了您的问题@拉兹迪:是的,至少有一个这样做了。我不知道如何添加你的评论作为答案,因为我还不能更新评论,而你首先回答了这个问题。这个解决方案解决了我的两个问题:删除日期文本,并将年份作为最终结果。没有解决这两个问题,datetime.strTime在默认情况下将年份设置为1900,这本身就没有好处。我对此解决方案所做的唯一更改是,我不需要使用datetime.datetime.strptime,只需要使用datetime.strptime和datetime.now(),然后它就工作了。是的,
datetime
的使用取决于您导入它的方式。您必须已从datetime导入datetime导入了
,是的,这就是我在代码中导入的方式。这就解释了。