无法在for循环中使用datetime.strptime()

时间:2017-08-01 20:33:58

标签: python python-3.x datetime

我有一个列表,其中每个元素本身是一个包含一些日期的双元素列表:

d = [['2004:08:16:09:54:58', 'peach'],
['2013:05:10:19:57:50', 'eggplant'],
['2007:05:24:07:37:51', 'zucchini,']]

对于嵌套在列表中的每个列表' d',我想使用datetime.strptime()来转换每个'字符串'日期到日期时间类型,同时保持第二个元素不变,即[' 2004:08:16:09:54:58','桃子'] - > [2004-08-16 09:54:58,'桃子']

执行以下工作:

print(datetime.strptime('2004:08:16:09:54:58', '%Y:%m:%d:%H:%M:%S'))
>>2004-08-16 09:54:58

但它似乎并没有在循环中发挥作用:

for i in d:
    datetime.strptime(i[0], '%Y:%m:%d:%H:%M:%S')
print d[0]:
>>['2004:08:16:09:54:58', 'peach']

如果我尝试使用转换后的字符串创建新列表而不是更改原始列表,我会遇到一个不同的问题:

new_list = []
for i in d:
    new_list.append(datetime.strptime(i[0],'%Y:%m:%d:%H:%M:%S'))
    new_list.append(i[1])
print(new_list[0])

>> 2004-08-16 09:54:58

此处,表格突然只有正确转换的日期时间对象,但没有水果/蔬菜对象。

任何人都可以提供对这两种情况的见解吗?感谢

2 个答案:

答案 0 :(得分:3)

快速轻松修复,您忘记覆盖以前的值。这是你应该怎么做的。

private

答案 1 :(得分:0)

当您首先追加时间,然后只有水果名称时,名称本身将位于new_list[1]

如果您希望新列表成为列表列表(即 - 与旧列表完全相同),则应使用:

for i in d:
    new_list.append([datetime.strptime(i[0],'%Y:%m:%d:%H:%M:%S'), i[1]])

因此,将这两个值作为列表附加到new_list

如果您希望保存datetime格式(即 - 2004-08-16 09:54:58),您可以将其保存为字符串,方法是使用.isoformat()

datetime.strptime(i[0],'%Y:%m:%d:%H:%M:%S').isoformat(' ')

此处的文档:https://docs.python.org/3.0/library/datetime.html#datetime.datetime.isoformat

或使用字符串格式:

'{:%Y-%m-%d %H:%M:%S}'.format(datetime.strptime(i[0],'%Y:%m:%d:%H:%M:%S'))

如果您想了解更多关于格式的信息,可以查看: https://pyformat.info/#datetime