J'ai un script qui doit exécuter les éléments suivants à différentes lignes du script:
today_date = datetime.date.today()
date_time = datetime.strp(date_time_string, '%Y-%m-%d %H:%M')
Dans mes déclarations d'importation, j'ai les éléments suivants:
from datetime import datetime
import datetime
Je reçois l'erreur suivante:
AttributeError: 'module' object has no attribute 'strp'
Si je change l'ordre des instructions d'importation en:
import datetime
from datetime import datetime
Je reçois l'erreur suivante:
AttributeError: 'method_descriptor' object has no attribute 'today'
Si je modifie à nouveau la déclaration d'importation en:
import datetime
Je reçois l'erreur suivante:
AttributeError: 'module' object has no attribute 'strp'
Que se passe-t-il ici et comment puis-je faire fonctionner les deux? L'apprécier. Je vous remercie.
Votre problème est que vous avez du code qui s'attend à ce que datetime
soit une référence à datetime
module et à un autre code qui s'attend à ce que datetime
soit une référence à datetime
classe. Évidemment, ça ne peut pas être les deux.
Quand tu fais:
from datetime import datetime
import datetime
Vous définissez d'abord datetime
pour qu'il soit une référence à la classe, puis vous le définissez immédiatement pour qu'il soit une référence au module. Lorsque vous le faites en sens inverse, c'est la même chose, mais cela finit par être une référence à la classe.
Vous devez renommer l'une de ces références. Par exemple:
import datetime as dt
from datetime import datetime
Ensuite, vous pouvez modifier les références sous la forme datetime.xxxx
qui font référence au module en dt.xxxx
.
Sinon, il suffit de import datetime
et de modifier toutes les références pour utiliser le nom du module. En d'autres termes, si quelque chose dit simplement datetime(...)
, vous devez changer cette référence en datetime.datetime
.
Python a malheureusement pas mal de ce genre de chose dans sa bibliothèque. S'ils suivaient leurs propres directives de nommage dans PEP 8 , la classe datetime
serait nommée Datetime
et il n'y aurait aucun problème à utiliser à la fois datetime
pour désigner le module et Datetime
pour désigner la classe.
Vous ne pouvez pas utiliser les deux instructions. la datetime
module contient une datetime
type. Le nom local datetime
dans votre propre module ne peut faire référence qu’à l’un ou l’autre.
Utilisez onlyimport datetime
, puis assurez-vous de toujours utiliser datetime.datetime
pour faire référence au type contenu:
import datetime
today_date = datetime.date.today()
date_time = datetime.datetime.strptime(date_time_string, '%Y-%m-%d %H:%M')
Maintenant, datetime
est le module, et vous vous référez aux types contenus via cela.
Vous pouvez également importer les types all dont vous avez besoin à partir du module:
from datetime import date, datetime
today_date = date.today()
date_time = datetime.strptime(date_time_string, '%Y-%m-%d %H:%M')
Ici datetime
est le type du module. date
est un autre type, issu du même module.
datetime
est un module qui contient un type également appelé datetime
. Vous semblez vouloir utiliser les deux, mais vous essayez d'utiliser le même nom pour désigner les deux. Le type et le module sont deux choses différentes et vous ne pouvez pas vous référer aux deux avec le nom datetime
dans votre programme.
Si vous devez utiliser quelque chose du module en plus du type datetime
(comme vous le faites apparemment), vous devez importer le module avec import datetime
. Vous pouvez ensuite faire référence au type "date" en tant que datetime.date
et au type datetime en tant que datetime.datetime
.
Vous pouvez aussi faire ceci:
from datetime import datetime, date
today_date = date.today()
date_time = datetime.strp(date_time_string, '%Y-%m-%d %H:%M')
Ici, vous importez uniquement les noms dont vous avez besoin (les types date/heure) et vous les importez directement afin que vous n'ayez pas besoin de faire référence au module lui-même.
En fin de compte, vous devez décider quels noms du module vous devez utiliser et quelle est la meilleure façon de les utiliser. Si vous utilisez uniquement un ou deux éléments du module (par exemple, uniquement les types date
et datetime
), vous pouvez importer ces noms directement. Si vous utilisez beaucoup d'éléments, il est probablement préférable d'importer le module et d'accéder à ses éléments à l'aide de la syntaxe à points afin d'éviter d'encombrer votre espace de noms global de noms spécifiques à la date.
Notez également que, si vous importez le nom du module lui-même, vous pouvez le raccourcir pour faciliter la frappe:
import datetime as dt
today_date = dt.date.today()
date_time = dt.datetime.strp(date_time_string, '%Y-%m-%d %H:%M')
La différence entre datetime datetime import et datetime normal est que vous avez affaire à un module à un moment donné et à une classe à un autre.
La fonction strptime n'existe que dans la classe datetime. Vous devez donc importer la classe avec le module. Sinon, vous devez spécifier datetime deux fois lorsque vous appelez cette fonction.
Le problème ici est que le nom de la classe et le nom du module ont reçu le même nom, ce qui crée un peu de confusion.
from datetime import datetime,timedelta
today=datetime.today()
print("Todays Date:",today)
yesterday=today-datetime,timedelta(days=1)
print("Yesterday date:",yesterday)
tommorrow=today+datetime.timedelta(days=1)
print("Tommorrow Date:",tommorrow)
essaye ça:
import datetime
from datetime import datetime as dt
today_date = datetime.date.today()
date_time = dt.strptime(date_time_string, '%Y-%m-%d %H:%M')
strp () n'existe pas. Je pense que tu veux dire strptime.