2016-11-08 769 views
0

我有一個包含字典列表的.txt文件,其中每個字典中的一個條目是格式爲「datetime.timedelta(天,秒)」的時間差異。 。找到的所有的時間差的平均值然而,當我嘗試做的timedelta任何以這種形式,我得到的錯誤python 3 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 

然後是我的問題,有一個簡單的辦法讓蟒蛇能夠翻譯datetime.timedelta(天,秒)形式爲timedelta(天,秒)?

+1

他們是同樣的事情。 '來自datetime import datetime'只是意味着第二個'datetime'掩蓋了模塊,因此'timedelta'錯誤。只要做一些像'import datetime as dt'那樣的事情,然後執行'dt.datetime.strftime()'(或者任何你想要的'datetime')和'dt.timedelta()'。 – roganjosh

回答

1

最後,datetime.timedelta(days, seconds)timedelta(days, seconds)是一樣的東西。

首先,有一個名爲datetime的模塊,其中包含幾個對象。如果你這樣做dir(datetime)你會看到(至少在Python 2.7):

['MAXYEAR', 
'MINYEAR', 
'__doc__', 
'__name__', 
'__package__', 
'date', 
'datetime', 
'datetime_CAPI', 
'time', 
'timedelta', 
'tzinfo'] 

你會注意到,那麼,該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

當你做了from datetime import datetime,你沒有導入datetime模塊來使用,而是進口datetime對象。因此,所有對datetime的引用都指對象,它不具有timedelta作爲屬性/方法,因此是錯誤。

記住第一個列表,有以下沒有什麼區別:

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

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