¿Cómo crear un nombre de archivo con la fecha y hora actual en Python?

4 minutos de lectura

avatar de usuario
devasia2112

Aquí hay un código funcional (crear archivo con éxito)

sys.stdout = open('filename1.xml', 'w')

Ahora estoy tratando de nombrar el archivo con la fecha/hora actual (no soy un experto en Python)

filename1 = datetime.now().strftime("%Y%m%d-%H%M%S")
sys.stdout = open(filename1 + '.xml', 'w')

Quiero escribir un nombre de archivo con la fecha y hora exactas, es un archivo xml, que el programa ya ha creado, solo necesito nombrar el archivo. El código anterior no funciona.

El error devolvió:

  File "./fix.py", line 226, in <module>
    filenames = datetime.now().strftime("%Y%m%d-%H%M%S")
AttributeError: 'module' object has no attribute 'now'

avatar de usuario
levon

mientras no se usa datetimeesto resuelve su problema (responde a su pregunta) de obtener una cadena con el formato de fecha y hora actual que especifique:

import time
timestr = time.strftime("%Y%m%d-%H%M%S")
print timestr

rendimientos:

20120515-155045

por lo que su nombre de archivo podría agregar o usar esta cadena.

  • ¡Entendido! el tiempo no estaba definido en mi secuencia de comandos y estaba tratando de usar la fecha y hora (no funciona, no sé por qué), pero con el tiempo está claro ahora, el nombre del archivo se crea con éxito. ¡Muchas gracias!

    – devasia2112

    15 mayo 2012 a las 19:56

  • No sé por qué aceptaste esta respuesta cuando hay dos respuestas que explican perfectamente qué estaba mal en el código de la pregunta. No hay nada en contra de la forma en que Levon hizo esto, funciona bien, pero cuando dices “no funciona, no sé por qué”, parece extraño porque tienes respuestas que explican por qué.

    –David Heffernan

    15 mayo 2012 a las 19:58


  • Cuando probé el código anterior, recibí el error “E AttributeError: ‘int’ object have noAttribute ‘strftime'”.

    – rwbyrd

    25/08/2015 a las 15:30

  • @rwbyrd Eso es extraño, acabo de probar esas 3 líneas exactas (copiar y pegar) con Python 3.4.1 y 2.7.6 y funciona, aunque con Python 3 necesitas usar print(timestr). ¿Copiaste este texto de arriba? ¿Quizás un error tipográfico de lo contrario?

    – Levón

    25 de agosto de 2015 a las 15:46


  • @rwbyrd Probablemente tenga una variable int llamada “tiempo” en algún lugar del alcance que está sombreando el time módulo.

    – Tomás

    20 de septiembre de 2015 a las 5:04

cambiar esta línea

filename1 = datetime.now().strftime("%Y%m%d-%H%M%S")

A

filename1 = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")

Tenga en cuenta el adicional datetime. Alternativamente, cambie su
import datetime a from datetime import datetime

  • @ B4NZ41 Eso no es cierto. El mensaje de error deja en claro que su código tiene import datetime en algún lugar.

    –David Heffernan

    15 mayo 2012 a las 20:00

  • 😉 ¡Lo siento! AHORA estoy usando el tiempo de importación, antes estaba usando la fecha y hora de importación

    – devasia2112

    15 mayo 2012 a las 20:04

  • @ B4NZ41 No importa lo que estés haciendo ahora. Importa lo que está en la pregunta.

    –David Heffernan

    15 mayo 2012 a las 20:07

avatar de usuario
Dev Aggarwal

Este es mucho más legible para los humanos.

from datetime import datetime

datetime.now().strftime("%Y_%m_%d-%I_%M_%S_%p")
'2020_08_12-03_29_22_AM'

  • Sí, pero ordenar por nombre no ordenará cronológicamente

    – Pedro

    31 de enero de 2020 a las 23:49

  • ¿Supongo que solo requiere AAMMDD en lugar de DDMMAA?

    – Dev Aggarwal

    1 de febrero de 2020 a las 11:20

avatar de usuario
David Heffernan

now es un método de clase en la clase datetime en el modulo datetime. Así que tú necesitas

datetime.datetime.now()

O puede usar una importación diferente

from datetime import datetime

Hecho de esta manera le permite usar datetime.now según el código de la pregunta.

avatar de usuario
unoindelijk

Me sorprende que no haya un solo formateador que devuelva un formato predeterminado (y seguro) ‘para agregar en nombre de archivo’ – formato de la época, simplemente podríamos escribir FD.write('mybackup'+time.strftime('%(formatter here)') + 'ext'

"%x" instead of "%Y%m%d-%H%M%S"

avatar de usuario
yosemite_k

Aquí hay algunos que necesitaba para incluir el sello de fecha y hora en el nombre de la carpeta para descargar archivos de un raspador web.

# import time and OS modules to use to build file folder name
import datetime
import time
import os

# Build string for directory to hold files
# Output Configuration
#   drive_letter = Output device location (hard drive) 
#   folder_name = directory (folder) to receive and store PDF files

drive_letter = r'D:\\' 
folder_name = r'downloaded-files'
folder_time = datetime.now().strftime("%Y-%m-%d_%I-%M-%S_%p")
folder_to_save_files = drive_letter + folder_name + folder_time 

# IF no such folder exists, create one automatically
if not os.path.exists(folder_to_save_files):
    os.mkdir(folder_to_save_files)

avatar de usuario
melifluo

Esto se imprime en un formato fácil de leer:

import datetime

time_now  = datetime.datetime.now().strftime('%m_%d_%Y_%H_%M_%S') 

print(time_now)

Producción: 02_03_2021_22_44_50

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad