comment créer un nom de fichier avec la date et l'heure actuelles en python?

173

Voici un code fonctionnel (Créer un fichier avec succès)

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

Maintenant, j'essaie de nommer le fichier avec la date et l'heure actuelle (je ne suis pas un expert en python)

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

Je veux écrire un nom de fichier avec la date et l'heure exactes, c'est un fichier xml, que le programme a déjà créé, j'ai juste besoin de nommer le fichier. Le code ci-dessus ne fonctionne pas.

[EDITED] - L'erreur renvoyée

  File "./fix.py", line 226, in <module>
    filenames = datetime.now().strftime("%Y%m%d-%H%M%S")
AttributeError: 'module' object has no attribute 'now'
deepcell
la source
vous avez besoin d'un =entre filenameetdatetime
Joel Cornett
En dehors de cela, comment exactement le "code ci-dessus ne fonctionne pas"?
Joel Cornett
Lorsque vous posez une question comme celle-ci, «ne fonctionne pas» ne suffit pas. Décrivez exactement comment cela échoue.
David Heffernan
1
Que voulez-vous dire par ne pas travailler? Cela génère-t-il une erreur? Que pensez-vous du résultat? Il n'est pas très utile de dire simplement "ça ne marche pas".
Joel Cornett
1
Oui! J'ai bien fait, sauf cette partie -> datetime.now () c'est -> datetime.datetime.now () mais j'utilise le temps maintenant .. jetez un oeil -> filenames = time.strftime ("% Y% m % d-% H% M% S ") sys.stdout = open (noms de fichiers + '.xml', 'w')
deepcell

Réponses:

360

Lorsque vous n'utilisez pas datetime, cela résout votre problème (répond à votre question) d'obtention d'une chaîne avec le format d'heure et de date actuel que vous spécifiez:

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

donne:

20120515-155045

afin que votre nom de fichier puisse ajouter ou utiliser cette chaîne.

Levon
la source
1
Je t'ai eu! le temps n'était pas défini dans mon script et j'essayais d'utiliser timedate (pas de travail, je ne sais pas pourquoi), mais avec le temps, c'est clair maintenant, le nom de fichier est créé avec succès. Merci beaucoup!
deepcell
2
Je ne sais pas pourquoi vous avez accepté cette réponse alors qu'il y a deux réponses qui expliquent parfaitement ce qui n'allait pas avec le code de la question. Rien contre la façon dont Levon a fait ça, ça marche bien, mais quand tu dis "ça marche pas, je ne sais pas pourquoi", ça semble bizarre parce que tu as des réponses qui expliquent pourquoi.
David Heffernan
Lorsque j'ai essayé le code ci-dessus, j'ai reçu une erreur "E AttributeError: 'int' object has no attribute 'strftime'" error.
rwbyrd
@rwbyrd C'est étrange, j'ai juste essayé ces 3 lignes exactes (copier-coller) avec Python 3.4.1 et 2.7.6 et cela fonctionne - bien qu'avec Python 3, vous devez utiliser print(timestr). Avez-vous copié ce texte d'en haut? Peut-être une faute de frappe autrement?
Levon
3
@rwbyrd Vous avez probablement une variable int appelée "time" quelque part dans la portée qui occulte le timemodule.
Thomas le
38

nowest une méthode de classe dans la classe datetimedu module datetime. Alors tu as besoin

datetime.datetime.now()

Ou vous pouvez utiliser une importation différente

from datetime import datetime

Fait de cette façon, vous pouvez utiliser datetime.nowselon le code de la question.

David Heffernan
la source
35

Changer cette ligne

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

À

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

Notez le supplément datetime. Sinon, changez votre import datetimeenfrom datetime import datetime

Andy
la source
1
@ B4NZ41 Ce n'est pas vrai. Le message d'erreur indique clairement que votre code se trouve import datetimequelque part.
David Heffernan
;) Désolé! MAINTENANT, j'utilise le temps d'importation, avant d'utiliser l'importation datetime
deepcell
2
@ B4NZ41 Peu importe ce que vous faites maintenant. Peu importe ce qu'il y a dans la question.
David Heffernan
16

Celui-ci est beaucoup plus lisible par l'homme.

from datetime import datetime

datetime.now().strftime("%d-%m-%Y_%I-%M-%S_%p")
'15-08-2019_11-57-48_PM'
Dev Aggarwal
la source
Oui, mais le tri par nom ne sera pas trié par ordre chronologique
Peter
Je suppose que cela nécessite juste YYMMDD au lieu de DDMMYY?
Dev Aggarwal le
5

Je suis surpris qu'il n'y ait pas un seul formateur qui renvoie une valeur par défaut (et sûre) 'pour l'ajout de nom de fichier' - format de l'heure, nous pourrions simplement écrire FD.write('mybackup'+time.strftime('%(formatter here)') + 'ext'

"%x" instead of "%Y%m%d-%H%M%S"
oneindelijk
la source
2

En voici quelques-uns dont j'avais besoin pour inclure l'horodatage dans le nom du dossier pour vider des fichiers à partir d'un racleur Web.

# import time and OS modules to use to build file folder name
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)
Docteur Rich Lysakowski
la source
Un moyen plus sûr de créer votre chemin pourrait être: folder_to_save_files = shutil.os.path.join(drive_letter, folder_name +folder_time)(une import shutildéclaration peut également remplacer la import osdéclaration)
oneindelijk