come creare un nome file con la data e l'ora correnti in Python?


173

Ecco un codice funzionale (Crea file con successo)

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

Ora sto provando a nominare il file con la data e l'ora correnti (non sono un esperto di Python)

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

Voglio scrivere un nome file con la data e l'ora esatte, è un file XML, che il programma ha già creato, ho solo bisogno di nominare il file. Il codice sopra non funziona.

[EDITED] - L'errore è tornato

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

hai bisogno di un =tra filenameedatetime
Joel Cornett,

A parte questo, come funziona esattamente il "codice sopra riportato"?
Joel Cornett,

Quando si presenta una domanda come questa, "non funziona" non è sufficiente. Descrivi esattamente come fallisce.
David Heffernan,

1
Cosa intendi per non lavorare? Genera un errore? Cosa ti aspetti che sia il risultato? Non è molto utile dire semplicemente "non funziona".
Joel Cornett,

1
Sì! Ho fatto bene, tranne questa parte -> datetime.now () è -> datetime.datetime.now () ma sto usando il tempo ora .. dai un'occhiata -> nomi dei file = time.strftime ("% Y% m % d-% H% M% S ") sys.stdout = open (nomi file + '.xml', 'w')
deepcell,

Risposte:


360

Mentre non lo usi datetime, questo risolve il tuo problema (rispondi alla tua domanda) di ottenere una stringa con il formato di data e ora corrente che specifichi:

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

rendimenti:

20120515-155045

così il tuo nome file potrebbe aggiungere o usare questa stringa.


1
Gotcha! il tempo non era definito nel mio script e stavo cercando di usare il timedate (non funziona, non so perché), ma con il tempo è chiaro ora, il nome del file viene creato con successo. Grazie mille!
deepcell,

2
Non so perché hai accettato questa risposta quando ci sono due risposte che spiegano perfettamente cosa non andava nel codice nella domanda. Niente in contrario a Levon, ha funzionato bene, ma quando dici "non funziona, non so perché", sembra strano perché hai delle risposte che spiegano il perché.
David Heffernan,

Quando ho provato il codice sopra, ho ricevuto un errore "E AttributeError: 'int' non ha alcun attributo 'strftime'".
rwbyrd,

@rwbyrd È strano, ho appena provato quelle esatte 3 righe (copia-incolla) con Python 3.4.1 e 2.7.6 e funziona, anche se con Python 3 devi usare print(timestr). Hai copiato questo testo dall'alto? Forse un errore di battitura altrimenti?
Levon,

3
@rwbyrd Probabilmente hai una variabile int chiamata "time" da qualche parte nell'ambito che sta oscurando il timemodulo.
Thomas,

38

nowè un metodo di classe datetimenella classe nel modulo datetime. Quindi hai bisogno

datetime.datetime.now()

Oppure puoi usare un'importazione diversa

from datetime import datetime

Fatto in questo modo ti permette di usare datetime.nowsecondo il codice nella domanda.


35

Cambia questa linea

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

Per

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

Nota il extra datetime. In alternativa, cambia import datetimeinfrom datetime import datetime


1
@ B4NZ41 Non è vero. Il messaggio di errore chiarisce che il tuo codice ha import datetimeda qualche parte.
David Heffernan,

;) Scusate! ORA sto usando il tempo di importazione, prima di usare il datetime di importazione
deepcell

2
@ B4NZ41 Non importa cosa stai facendo ora. È importante ciò che è nella domanda.
David Heffernan,

16

Questo è molto più leggibile dall'uomo.

from datetime import datetime

datetime.now().strftime("%d-%m-%Y_%I-%M-%S_%p")
'15-08-2019_11-57-48_PM'

Sì, ma l'ordinamento per nome non ordinerà cronologicamente
Peter

Immagino che richiede solo AAMMGG invece di GGMMAA?
Dev Aggarwal,

5

Sono sorpreso che non ci sia un singolo formattatore che restituisce un predefinito (e sicuro) "per l'aggiunta nel nome del file" - formato dell'epoca, potremmo semplicemente scrivere FD.write('mybackup'+time.strftime('%(formatter here)') + 'ext'

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

2

Eccone alcuni che dovevo includere il timbro data-ora nel nome della cartella per scaricare file da un raschietto 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)

Un modo più sicuro per creare il tuo percorso potrebbe essere: folder_to_save_files = shutil.os.path.join(drive_letter, folder_name +folder_time)(anche import shutilun'istruzione può sostituire l' import osaffermazione)
oneindelijk
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.