2012-05-15 16 views
73

Aquí es un código funcional (Crear archivo con éxito)cómo crear un nombre de archivo con la fecha y hora actual en python?

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

Ahora estoy tratando de nombrar el archivo con la fecha actual Tiempo (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 está funcionando.

[Editado] - El error devuelto

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

necesita '' 'entre' nombre_de_archivo' y 'datetime' –

+0

Aparte de eso, ¿cómo es exactamente que el" código anterior no funciona "? –

+0

Al presentar una pregunta como esta, "no funcionar" no es suficiente. Describe exactamente cómo falla. –

Respuesta

160

Aunque no usar datetime, esto resuelve su problema (responde a su pregunta) de conseguir una cadena con la hora actual y el formato de fecha que especifique:

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

rendimientos:

20120515-155045 

para que su nombre de archivo pueda agregar o usar esta cadena.

+1

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

+2

No sé por qué aceptó esta respuesta cuando hay dos respuestas que explican perfectamente lo que estaba mal con el código en la pregunta. 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é. –

+0

Cuando probé el código anterior, recibí un, "E AttributeError: 'int' objeto no tiene atributo 'strftime'" error. – rwbyrd

26

now es un método de clase en la clase datetime en el módulo datetime. Por lo que necesita

datetime.datetime.now() 

O puede utilizar una importación diferente

from datetime import datetime 

hecho de esta manera le permite utilizar datetime.now según el código en la pregunta.

+0

¡Gracias por el regreso! – B4NZ41

+0

+1 para la importación alternativa, lo que también habría escrito. –

14

cambiar esta línea

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

Para

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

Nota extra datetime. Como alternativa, cambiar su import datetime-from datetime import datetime

+1

Gracias, estoy usando solo el tiempo. – B4NZ41

+1

@ B4NZ41 Eso no es verdad. El mensaje de error deja en claro que su código tiene 'import datetime' en alguna parte. –

+0

;) ¡Lo siento! AHORA estoy usando el tiempo de importación, antes de usar import datetime – B4NZ41

3

Me sorprende que no hay alguna sola formateador que devuelve un valor predeterminado (y seguro) 'para consignar en el nombre de archivo' - formato de la hora, Podríamos escribir simplemente FD.write('mybackup'+time.strftime('%(formatter here)') + 'ext'

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

Totalmente de acuerdo. Muy sorprendente que uno no exista. Debemos estar perdiendo algo. – Shaun

Cuestiones relacionadas