2017-07-24 48 views
0

我有列表,看起来像下面的列表:转换列表中的列表一个datetime.datetime项STRFTIME Python的

[['Test', datetime.datetime(2017, 6, 30, 0, 39, 32), 'Log cribs holding approach fills are spreading (failing). Hole in town approach at end of deck as a result. Ballast walls independent of girders...could weld them.'], ['Test', datetime.datetime(2017, 6, 29, 23, 12, 3), '3x1 WBC. Town side sill looks as if it shifted towards stream. Stringers overhang sill 2m. Stringers and sills cedar. 70cm of gravel surface. Both sills have been severely scoured, and actively moving. Recommend rebuilding WBC. Stream grade 13%']] 

我要转换的datetime.datetime项目STRFTIME和正在使用以下代码:

for i in list_of_lists: 
    list_of_lists.append(i[1].strftime('%Y-%b-%d')) 

我得到以下错误:

AttributeError: 'str' object has no attribute 'strftime' 

当我打印类型(I [1] )我得到:

<type 'datetime.datetime'> 

所以我的问题是在我的append语句中,为什么它将它作为字符串读取?有没有办法做我想要完成的事情?

+4

你'append'ing到列表中,而迭代它...修改列表而迭代意味着你会有一个糟糕的一天。 – TemporalWolf

+1

在某个时候,'i [1] =='0''。 – jonrsharpe

+0

你想'i [1] = i [1] .strftime('%Y-%b-%d')'不是'lst.append(...)' – TemporalWolf

回答

1

追加到该列表是没有答案的(并且是在迭代是一个坏主意):

for i in lst: 
    print lst 
    lst.append(i[1].strftime('%Y-%b-%d')) 

产量:

[['Test', datetime.datetime(2017, 6, 30, 0, 39, 32), '...'], ['Test', datetime.datetime(2017, 6, 29, 23, 12, 3), '...']] 
[['Test', datetime.datetime(2017, 6, 30, 0, 39, 32), '...'], ['Test', datetime.datetime(2017, 6, 29, 23, 12, 3), '...'], '2017-Jun-30'] 
[['Test', datetime.datetime(2017, 6, 30, 0, 39, 32), '...'], ['Test', datetime.datetime(2017, 6, 29, 23, 12, 3), '...'], '2017-Jun-30', '2017-Jun-29'] 

通知所有的通行权被追加新的项目,该列表,而不是转换它们,因此它然后尝试在'2017-Jun-30'上执行相同操作并失败。

相反,我们希望将其转换:

for i in lst: 
    print lst 
    i[1] = i[1].strftime('%Y-%b-%d') 

这将产生:

[['Test', datetime.datetime(2017, 6, 30, 0, 39, 32), '...'], ['Test', datetime.datetime(2017, 6, 29, 23, 12, 3), '...']] 
[['Test', '2017-Jun-30', '...'], ['Test', datetime.datetime(2017, 6, 29, 23, 12, 3), '...']] 
[['Test', '2017-Jun-30', '...'], ['Test', '2017-Jun-29', '...']]