python 3中timedelta的Datetime属性错误

python 3中timedelta的Datetime属性错误,python,python-3.x,datetime,time,timedelta,Python,Python 3.x,Datetime,Time,Timedelta,我有一个包含字典列表的.txt文件,其中每个字典中的一个条目是“datetime.timedelta(天,秒)”格式的时间差。我试图找到所有时间差的平均值。但是,当我尝试使用这种格式的时间差做任何事情时,我会得到错误 AttributeError: type object 'datetime.datetime' has no attribute 'timedelta' 例如,下面给出了上述属性错误: from datetime import datetime, timedelta print(

我有一个包含字典列表的.txt文件,其中每个字典中的一个条目是“datetime.timedelta(天,秒)”格式的时间差。我试图找到所有时间差的平均值。但是,当我尝试使用这种格式的时间差做任何事情时,我会得到错误

AttributeError: type object 'datetime.datetime' has no attribute 'timedelta'
例如,下面给出了上述属性错误:

from datetime import datetime, timedelta
print(datetime.timedelta(0, 9780))
似乎我可以通过使用以下格式来解决问题:

from datetime import datetime, timedelta
print(timedelta(0, 9780))
我会得到结果:

2:43:00

那么我的问题是,有没有一种简单的方法让python能够将datetime.timedelta(天,秒)转换成timedelta(天,秒)的形式?

最终,
datetime.timedelta(天,秒)
timedelta(天,秒)
是同一回事

首先,有一个名为
datetime
的模块,其中包含多个对象。如果执行
dir(datetime)
,您将看到(至少在Python 2.7中):

然后,您将注意到,
datetime
模块包含两个感兴趣的对象;一个也称为
datetime
,另一个称为
timedelta
。如果您随后执行了
dir(datetime.datetime)
,您将看到:

['__add__',
 '__class__',
 '__delattr__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__gt__',
 '__hash__',
 '__init__',
 '__le__',
 '__lt__',
 '__ne__',
 '__new__',
 '__radd__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__rsub__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__sub__',
 '__subclasshook__',
 'astimezone',
 'combine',
 'ctime',
 'date',
 'day',
 'dst',
 'fromordinal',
 'fromtimestamp',
 'hour',
 'isocalendar',
 'isoformat',
 'isoweekday',
 'max',
 'microsecond',
 'min',
 'minute',
 'month',
 'now',
 'replace',
 'resolution',
 'second',
 'strftime',
 'strptime',
 'time',
 'timetuple',
 'timetz',
 'today',
 'toordinal',
 'tzinfo',
 'tzname',
 'utcfromtimestamp',
 'utcnow',
 'utcoffset',
 'utctimetuple',
 'weekday',
 'year']
该列表中没有
timedelta

如果从datetime导入datetime,则没有导入要使用的
datetime
模块,而是导入了
datetime
对象。因此,对
datetime
的所有引用都引用该对象,该对象没有
timedelta
作为属性/方法,因此出现错误

记住第一个列表,以下各项之间没有区别:

from datetime import timedelta
my_time = timedelta(0, 9780)


它们是一样的。
from datetime import datetime
只意味着第二个
datetime
屏蔽了模块,因此
timedelta
出现错误。只需执行类似于
import datetime as dt
的操作,然后执行
dt.datetime.strftime()
(或任何您想要的
datetime
)例如,
dt.timedelta()
from datetime import timedelta
my_time = timedelta(0, 9780)
import datetime
my_time = datetime.timedelta(0, 9780)