for循环中的Python日期转换失败

时间:2017-05-17 21:52:16

标签: python time

我以为我已经完成了这件事,但是一些根本性的东西正在绊倒我。

我有一个如下所示的日期列表:

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"))

2 个答案:

答案 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我将添加一些代码来将第三行的日期更改为我想要的格式,并留下真正古怪的线条。