Python 如何使用strftime格式化列表中的datetime对象,同时不影响以下数字

Python 如何使用strftime格式化列表中的datetime对象,同时不影响以下数字,python,list,datetime,Python,List,Datetime,我有一个典型的数据列表,其中第一个项目是datetime对象,下面的项目是与日期和时间对应的数据。我想打印并格式化datetime对象。我不希望使用str表示datetime,而是希望通过strftime或类似方式选择格式 我试过了 print('{}'.format(', '.join(map(str,row)))) 它工作正常,但我真的不想要那种格式(从) 我知道如何使用strftime,但我不知道如何在列表中的数据上调用它。似乎应该有一个简单的方法来做到这一点。当搜索如何执行此操作时,

我有一个典型的
数据列表
,其中第一个项目是datetime对象,下面的项目是与日期和时间对应的数据。我想打印并格式化
datetime
对象。我不希望使用
str
表示
datetime
,而是希望通过
strftime
或类似方式选择格式

我试过了

 print('{}'.format(', '.join(map(str,row))))
它工作正常,但我真的不想要那种格式(从)


我知道如何使用strftime,但我不知道如何在
列表中的数据上调用它。似乎应该有一个简单的方法来做到这一点。当搜索如何执行此操作时,结果要么是关于
strftime
,要么是在
列表中使用
str
,如上所述,因此我无法找到我正在尝试执行的操作。

这将使非
datetime
对象单独存在(我假设它们是字符串-如果不是,请使用
else-str(项)
而不是
其他项
)。它使用三元
if..else
查看
行中的每个项目

print(', '.join(datetime.datetime.strftime(item, '%Y%m%d') if type(item) == datetime.datetime else item for item in row))
format()
似乎没有必要,因为您只打印一个项目,不进行任何格式化

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'
[25]中的
:打印行((datetime.datetime(2010,12,02),“foo”,1.23e3,-1000,
日期时间。日期(2012年2月12日)
20101202,福奥,1230.0,-10002012-02-12
[24]中:打印行((datetime.date(2012,12,02),)
20121202
在[27]中:打印第行(())
索引器错误:元组索引超出范围
在[29]中:打印第(1000,)行
AttributeError:“int”对象没有属性“strftime”

它可以工作!我不得不用'else str(item)'代替'else item'来格式化我的双人表,但这正是我想要的。谢谢古怪,因此不适合制作(也是一个很好的例子)。@ivan,你能解释一下你的意思吗?古怪=行为不一致,取决于许多随机因素。这可能会导致副作用和一般的不可靠性。我在一个打印函数中使用它来打印一个具有良好定义格式的对象中的数据。对我来说,这一行是有效的。我本可以写一个方法来处理这个,但我认为这一行的解决方案更干净。如果传递一个带有自定义
\uuuuu getitem\uuuuuuuu
@TigerhawkT3的
\uuu getitem\uuuuuuu>子类的
列表,而不重新定义
\uuuuu iter\uuuuuuuuuu
则会相应地阻止对象像索引序列(违反
seq[i]==list(iter(seq))[i]
)。那么为什么这是被否决的?我事先花了两个小时查找这个。如上所述,结果不是我想要的,因为常见的答案是针对不同的问题。似乎没有人愿意回答这个问题,而且是唯一一个获得否决票的人,因为我的非生产代码的解决方案是“生产无法接受的”。如果你打算花时间否决投票,请在对话中添加一些有用的内容,例如要求澄清。