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'')