Python-使用datetime.strptime迭代列表

时间:2016-04-05 10:47:48

标签: python datetime matplotlib

我在列表中有一个日期文本文件,如下所示:

values1 = ['1999-02-11', '1999-02-10', '1999-02-09', '1999-02-08', '1999-02-05',
           '1999-02-04', '1999-02-03', '1999-02-02', '1999-02-01', '1999-01-29',
           '1999-01-28', '1999-01-27', '1999-01-26', '1999-01-25', '1999-01-22',
           '1999-01-21', '1999-01-20', '1999-01-19', '1999-01-18', '1999-01-15',
           '1999-01-14', '1999-01-13', '1999-01-12', '1999-01-11', '1999-01-08',
           '1999-01-07', '1999-01-06', '1999-01-05', '1999-01-04']

我想要做的是遍历每个值,使用此代码使用datetime获取格式。这应该允许我根据值列表绘制这个日期列表。

我正在尝试在接下来的几行代码中执行此操作(这只是为了使列表格式正确,我还没有得到绘制图形的代码!)

for line in values1:
    datetime.strptime(line, '%Y-%m-%d').date()

但是它给了我以下错误:

ValueError: time data 'Date' does not match format '%Y-%m-%d'

我不确定为什么?

ValueError:时间数据'日期'不符合格式'%Y-%m-%d'

你说你正在阅读文件中的日期列表。可能是其中一行有日期而不是日期值,或者可能是标题行。

您提供的代码有效。检查文件中的输入值

由于文本文件中的标题会导致错误,我已设法使其正常工作!

values1=calues1[1::] for line in values1: datetime.strptime(line, '%Y-%m-%d').date()

4 个答案:

答案 0 :(得分:2)

正如错误所说

ValueError: time data 'Date' does not match format '%Y-%m-%d'

你说你正在阅读文件中的日期列表。可能是其中一行包含单词Date而不是日期值,或者可能是标题行。

您提供的代码有效。检查文件中的输入值

答案 1 :(得分:1)

此代码适用于我

from datetime import datetime

values1 = ['1999-02-11', '1999-02-10', '1999-02-09', '1999-02-08', '1999-02-05', '1999-02-04', '1999-02-03', '1999-02-02', '1999-02-01', '1999-01-29', '1999-01-28', '1999-01-27', '1999-01-26', '1999-01-25', '1999-01-22', '1999-01-21', '1999-01-20', '1999-01-19', '1999-01-18', '1999-01-15', '1999-01-14', '1999-01-13', '1999-01-12', '1999-01-11', '1999-01-08', '1999-01-07', '1999-01-06', '1999-01-05', '1999-01-04']

for line in values1:
    print datetime.strptime(line, '%Y-%m-%d').date()

输出

1999-02-11
1999-02-10
1999-02-09
1999-02-08
1999-02-05
1999-02-04

也许你的问题是导入。

P.S。 python 2.7

答案 2 :(得分:1)

确保从datetime模块导入日期时间对象(以下代码段中的第一行):

>>> from datetime import datetime 
>>> 
>>> values1 = ['1999-02-11', '1999-02-10', '1999-02-09', '1999-02-08', '1999-02-05', '1999-02-04', '1999-02-03', '1999-02-02', '1999-02-01', '1999-01-29', '1999-01-28', '1999-01-27', '1999-01-26', '1999-01-25', '1999-01-22', '1999-01-21', '1999-01-20', '1999-01-19', '1999-01-18', '1999-01-15', '1999-01-14', '1999-01-13', '1999-01-12', '1999-01-11', '1999-01-08', '1999-01-07', '1999-01-06', '1999-01-05', '1999-01-04']
>>> 
>>> for line in values1:
...     x = datetime.strptime(line, '%Y-%m-%d').date()
...     print x
... 
1999-02-11
1999-02-10
1999-02-09
1999-02-08
1999-02-05
1999-02-04
1999-02-03
1999-02-02
1999-02-01
1999-01-29
1999-01-28
1999-01-27
1999-01-26
1999-01-25
1999-01-22
1999-01-21
1999-01-20
1999-01-19
1999-01-18
1999-01-15
1999-01-14
1999-01-13
1999-01-12
1999-01-11
1999-01-08
1999-01-07
1999-01-06
1999-01-05
1999-01-04

答案 3 :(得分:1)

我认为问题出在您的导入中。您必须在datetime中导入datetime模块。

使用:

import datetime

for line in values1:
    print datetime.datetime.strptime(line, '%Y-%m-%d').date()

from datetime import datetime

for line in values1:
    print datetime.strptime(line, '%Y-%m-%d').date()

在python 2.7和3上都有效(使用print()代替python 3)。