我以为我已经完成了这件事,但是一些根本性的东西正在绊倒我。
我有一个如下所示的日期列表:
dates[0:5]
['September 30 2016',
'September 6 2016',
'September 13 2016',
'October 13 2016',
'October 13 2014']
我不仅希望将它们转换为结构化时间,而且还要退回到Excel可以理解的内容中 - 因为这是我的协作者正在使用的内容,Excel并不认识上述条目,以及185个其他人,作为日期(无论出于何种原因......我试过)。
所以,我写了一些测试代码:
date_in = time.strptime(dates[3], "%B %d %Y")
date_out = time.strftime("%Y-%m-%d", date_in)
print(date_out)
2016-10-13
可爱。但是当我把它放入一个for
循环来处理字符串时,我不断收到错误。
这是循环:
stripped = []
for item in dates:
raw = time.strptime(item, "%B %d %Y")
stripped.append(raw)
这就是错误:
ValueError: unconverted data remains: updated September 30 2016
请注意我知道上面的for
循环没有做我说的我想做的事情:我试图让它回到失败点。我的原始代码是:
for the_date in dates:
time.strftime("%Y-%m-%d", time.strptime(the_date, "%b %d %Y"))
答案 0 :(得分:1)
格式上有一个小错误。只需将格式从"%b %d %Y"
更改为"%B %d %Y"
即可。另外我添加了一个简短的片段:
import time
dates = [
'September 30 2016',
'September 6 2016',
'September 13 2016',
'October 13 2016',
'October 13 2014']
# ↓
print([time.strftime("%Y-%m-%d", time.strptime(date, "%B %d %Y")) for date in dates])
# ['2016-09-30', '2016-09-06', '2016-09-13', '2016-10-13', '2014-10-13']
答案 1 :(得分:0)
juanpa.arrivillaga说得对。我将代码更改为包含try/except
:
for item in dates:
try:
raw = time.strptime(item, "%B %d %Y")
stripped.append(raw)
except ValueError:
print(item, dates.index(item))
我收到的数据/输入问题我还没有看到。 (这就是我工作得太快的原因。)
以下是前三个,记录:
August 26 2016 updated September 30 2016 23
Septmeber 1 2016 25
12/1/2016 46
现在,juanpa让我意识到我可以使用try/except
我将添加一些代码来将第三行的日期更改为我想要的格式,并留下真正古怪的线条。