example create biblioteca python datetime attributeerror

create - python datetime to string format



python "import datetime" vs "from datetime import datetime" (5)

Tengo un script que necesita ejecutar lo siguiente en diferentes líneas en el script:

today_date = datetime.date.today() date_time = datetime.strp(date_time_string, ''%Y-%m-%d %H:%M'')

En mis declaraciones de importación tengo lo siguiente:

from datetime import datetime import datetime

Obtuve el siguiente error:

AttributeError: ''module'' object has no attribute ''strp''

Si cambio el orden de las declaraciones de importación a:

import datetime from datetime import datetime

Obtuve el siguiente error:

AttributeError: ''method_descriptor'' object has no attribute ''today''

Si vuelvo a cambiar la declaración de importación a:

import datetime

Obtuve el siguiente error:

AttributeError: ''module'' object has no attribute ''strp''

¿Qué está pasando aquí y cómo consigo que ambos trabajen? Lo aprecio. Gracias.


La diferencia entre datetime import datetime y normal import datetime es que se trata de un módulo a la vez y de una clase a otra.

La función strptime solo existe en la clase datetime, por lo que debe importar la clase con el módulo; de lo contrario, deberá especificar datetime dos veces al llamar a esta función.

Lo que ocurre aquí es que, al nombre de la clase y al nombre del módulo se le ha dado el mismo nombre, por lo que crea un poco de confusión.


No puedes usar ambas afirmaciones; el módulo datetime contiene un tipo datetime . El nombre local datetime en su propio módulo solo puede referirse a uno u otro.

Use solo import datetime , luego asegúrese de usar siempre datetime.datetime para referirse al tipo contenido:

import datetime today_date = datetime.date.today() date_time = datetime.datetime.strptime(date_time_string, ''%Y-%m-%d %H:%M'')

Ahora datetime es el módulo, y usted se refiere a los tipos contenidos a través de eso.

Alternativamente, importe todos los tipos que necesite del módulo:

from datetime import date, datetime today_date = date.today() date_time = datetime.strptime(date_time_string, ''%Y-%m-%d %H:%M'')

Aquí datetime es el tipo del módulo. date es otro tipo, desde el mismo módulo.


Su problema es que tiene algún código que espera que datetime sea ​​una referencia al módulo datetime y otro código que espera que datetime sea ​​una referencia a la clase datetime . Obviamente, no puede ser a la vez.

Cuando tu lo hagas:

from datetime import datetime import datetime

Primero está configurando datetime para que sea una referencia a la clase, y luego configúrelo inmediatamente para que sea una referencia al módulo. Cuando lo haces al revés, es lo mismo, pero termina siendo una referencia a la clase.

Es necesario cambiar el nombre de una de estas referencias. Por ejemplo:

import datetime as dt from datetime import datetime

Luego puede cambiar las referencias en el formulario datetime.xxxx que se refieren al módulo a dt.xxxx .

O bien, solo import datetime y cambie todas las referencias para usar el nombre del módulo. En otras palabras, si algo simplemente dice datetime(...) necesita cambiar esa referencia a datetime.datetime .

Python tiene un poco de este tipo de cosas en su biblioteca, desafortunadamente. Si siguieran sus propias pautas de nomenclatura en PEP 8 , la clase datetime se llamaría Datetime y no habría ningún problema al utilizar datetime para indicar el módulo y Datetime para indicar la clase.


prueba esto:

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 () no existe. Creo que te refieres a strptime.


datetime es un módulo que contiene un tipo que también se llama datetime . Parece que quieres usar ambos, pero estás tratando de usar el mismo nombre para referirse a ambos. El tipo y el módulo son dos cosas diferentes y no puede referirse a ambos con el nombre datetime en su programa.

Si necesita usar algo del módulo además del tipo de datetime (como aparentemente lo hace), entonces necesita importar el módulo con import datetime y import datetime . Luego puede referirse al tipo de "fecha" como datetime.date y al tipo de datetime.datetime como datetime.datetime .

También podrías hacer esto:

from datetime import datetime, date today_date = date.today() date_time = datetime.strp(date_time_string, ''%Y-%m-%d %H:%M'')

Aquí, solo importa los nombres que necesita (fecha y fecha) y los importa directamente para que no necesite consultar el módulo en absoluto.

En última instancia, debe decidir qué nombres del módulo debe usar y cuál es la mejor forma de usarlos. Si solo está utilizando una o dos cosas del módulo (por ejemplo, solo la date y los tipos de date y datetime ), puede estar bien importar esos nombres directamente. Si está utilizando muchas cosas, probablemente es mejor importar el módulo y acceder a las cosas que contiene dentro de él con la sintaxis de puntos, para evitar saturar su espacio de nombres global con nombres específicos de fecha.

También tenga en cuenta que, si importa el nombre del módulo, puede acortar el nombre para facilitar la escritura:

import datetime as dt today_date = dt.date.today() date_time = dt.datetime.strp(date_time_string, ''%Y-%m-%d %H:%M'')