2016-11-08 2 views
0

Ich habe eine TXT-Datei mit einer Liste von Wörterbüchern, wobei ein Eintrag in jedem Wörterbuch einen Zeitunterschied im Format "datetime.timedelta (Tage, Sekunden) ist. Ich versuche es . den Durchschnitt aller Zeitdifferenzen finden jedoch wenn ich versuche, etwas mit dem Timedelta in diesem Format zu tun, erhalte ich die FehlerDatetime Attribut Fehler für Timedelta in Python 3

AttributeError: type object 'datetime.datetime' has no attribute 'timedelta' 

zum Beispiel gibt folgend mir die oben Attribut Fehler:

from datetime import datetime, timedelta 
print(datetime.timedelta(0, 9780)) 

Es scheint, als ob ich das Problem lösen kann, indem ich stattdessen die Format:

from datetime import datetime, timedelta 
print(timedelta(0, 9780)) 

Und ich werde das Ergebnis erhalten:

2:43:00 

Meine Frage ist, dann gibt es eine einfache Möglichkeit, Python erhalten zu können, die datetime.timedelta (Tage, Sekunden) übersetzen in die Form timedelta (Tage, Sekunden)?

+1

Sie sind das Gleiche. 'from datetime import datetime' bedeutet nur, dass die zweite' datetime' das Modul maskiert, daher der Fehler mit 'timedelta'. Tun Sie etwas wie 'import datetime as dt' und dann' dt.datetime.strftime() '(oder was auch immer Sie' datetime' wollen) und 'dt.timedelta()' zum Beispiel. – roganjosh

Antwort

1

Schließlich sind datetime.timedelta(days, seconds) und timedelta(days, seconds) die gleiche Sache.

Erstens gibt es ein Modul namens datetime, das mehrere Objekte enthält. Wenn Sie dir(datetime) tun, werden Sie (zumindest in Python 2.7) sehen:

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

Sie beachten, dann, dass die datetimeModul zwei Objekte von Interesse enthält; eine auch genannt datetime und eine timedelta genannt. Wenn Sie dann dir(datetime.datetime) täte, würde man sehen:

['__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'] 

Es gibt keine timedelta in dieser Liste.

Wenn Sie from datetime import datetime tat, nicht wahr importieren das datetime Modul zu verwenden, sondern importiert die datetimeObjekt. Alle Verweise auf datetime beziehen sich daher auf das Objekt, das timedelta nicht als Attribut/Methode hat, daher der Fehler.

die erste Liste zu erinnern, gibt es keinen Unterschied zwischen den folgenden:

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

und

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