我有一个典型的数据list
,其中第一项是datetime对象,下面的项是与日期和时间相对应的数据。我想打印和格式化datetime
对象。我不希望datetime
的str
表示,而是希望通过strftime
或类似的格式选择。
我试过了
print('{}'.format(', '.join(map(str,row))))
,它工作得很好,但我真的不想要那种格式(从在打印datetime对象列表时重写默认格式)。
我知道如何使用strftime
,但我不知道如何在list
的数据上调用它。似乎应该有一个简单的方法来做到这一点。当搜索如何执行此操作时,结果是关于strftime
或在list
中使用str
,如上所述,因此我无法找到我要做的事情。
print ", ".join((row[0].strftime('%Y%m%d'),)+tuple(str(i) for i in row[1:]))
在下面的例子中,我将这一行定义为def print_row(row):
。
In [25]: print_row( (datetime.datetime(2010,12,02),"foo",1.23e3,-1000,
datetime.date(2012,02,12)) )
20101202, foo, 1230.0, -1000, 2012-02-12
In [24]: print_row((datetime.date(2012,12,02),))
20121202
In [27]: print_row(())
<stacktrace>
IndexError: tuple index out of range
In [29]: print_row((1000,))
<stacktrace>
AttributeError: 'int' object has no attribute 'strftime'
这将使非datetime
对象单独存在(我假设它们是字符串-如果不是,使用else str(item)
而不是else item
)。它使用三元制if..else
来查看row
中的每个项。
print(', '.join(datetime.datetime.strftime(item, '%Y%m%d') if type(item) == datetime.datetime else item for item in row))
format()
似乎没有必要,因为您只打印一个项目,而不做任何格式化。