Wie erstelle ich einen Dateinamen mit dem aktuellen Datum und der aktuellen Uhrzeit in Python?

173

Hier ist ein Funktionscode (Datei mit Erfolg erstellen)

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

Jetzt versuche ich, die Datei mit der aktuellen Datums- und Uhrzeitangabe zu benennen (ich bin kein Python-Experte).

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

Ich möchte einen Dateinamen mit dem genauen Datum und der genauen Uhrzeit schreiben. Es handelt sich um eine XML-Datei, die das Programm bereits erstellt hat. Ich muss nur die Datei benennen. Der obige Code funktioniert nicht.

[BEARBEITET] - Der Fehler wurde zurückgegeben

  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
quelle
Sie brauchen eine =zwischen filenameunddatetime
Joel Cornett
Wie genau funktioniert der "obige Code nicht"?
Joel Cornett
Wenn Sie eine solche Frage stellen, reicht "nicht funktionieren" nicht aus. Beschreiben Sie genau, wie es fehlschlägt.
David Heffernan
1
Was meinst du damit, nicht zu arbeiten? Erzeugt es einen Fehler? Was erwarten Sie von dem Ergebnis? Es ist nicht sehr hilfreich zu sagen, dass es nicht funktioniert.
Joel Cornett
1
Ja! Ich habe es richtig gemacht, außer diesem Teil -> datetime.now () ist es -> datetime.datetime.now (), aber ich benutze jetzt time .. schau mal -> filenames = time.strftime ("% Y% m % d-% H% M% S ") sys.stdout = open (Dateinamen + '.xml', 'w')
deepcell

Antworten:

359

Wenn Sie es nicht verwenden datetime, wird Ihr Problem gelöst (beantwortet Ihre Frage), eine Zeichenfolge mit dem von Ihnen angegebenen aktuellen Zeit- und Datumsformat zu erhalten:

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

Ausbeuten:

20120515-155045

Ihr Dateiname könnte diese Zeichenfolge anhängen oder verwenden.

Levon
quelle
1
Erwischt! Die Zeit wurde in meinem Skript nicht definiert und ich habe versucht, das Zeitdatum zu verwenden (funktioniert nicht, ich weiß nicht warum), aber mit der Zeit ist jetzt klar, dass der Dateiname mit Erfolg erstellt wird. Ich danke dir sehr!
Deepcell
2
Ich weiß nicht, warum Sie diese Antwort akzeptiert haben, wenn es zwei Antworten gibt, die genau erklären, was mit dem Code in der Frage falsch war. Nichts gegen die Art und Weise, wie Levon dies getan hat, es funktioniert gut, aber wenn Sie sagen "nicht funktionieren, ich weiß nicht warum", erscheint es seltsam, weil Sie Antworten haben, die erklären, warum.
David Heffernan
Als ich den obigen Code ausprobierte, erhielt ich den Fehler "E AttributeError: 'int' hat kein Attribut 'strftime'".
rwbyrd
@rwbyrd Das ist seltsam, ich habe gerade genau diese 3 Zeilen (Kopieren-Einfügen) mit Python 3.4.1 und 2.7.6 ausprobiert und es funktioniert - obwohl Sie mit Python 3 verwenden müssen print(timestr). Haben Sie diesen Text von oben kopiert? Vielleicht ein Tippfehler sonst?
Levon
3
@rwbyrd Sie haben wahrscheinlich irgendwo im Bereich eine int-Variable namens "time", die das timeModul beschattet .
Thomas
38

nowist eine Klassenmethode in der Klasse datetimeim Modul datetime. Also brauchst du

datetime.datetime.now()

Oder Sie können einen anderen Import verwenden

from datetime import datetime

Auf diese Weise können Sie datetime.nowgemäß dem Code in der Frage verwenden.

David Heffernan
quelle
35

Ändern Sie diese Zeile

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

Zu

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

Beachten Sie das Extra datetime. Alternativ ändern Sie Ihre import datetimezufrom datetime import datetime

Andy
quelle
1
@ B4NZ41 Das stimmt nicht. Die Fehlermeldung macht deutlich, dass Ihr Code import datetimeirgendwo ist.
David Heffernan
;) Es tut uns leid! JETZT verwende ich die Importzeit, bevor ich die Importzeit verwendet habe
deepcell
2
@ B4NZ41 Es ist egal, was du gerade machst. Es ist wichtig, was in Frage kommt.
David Heffernan
16

Dieser ist viel menschlicher lesbar.

from datetime import datetime

datetime.now().strftime("%d-%m-%Y_%I-%M-%S_%p")
'15-08-2019_11-57-48_PM'
Dev Aggarwal
quelle
Ja, aber das Sortieren nach Namen wird nicht chronologisch sortiert
Peter
Ich denke, das erfordert nur JJMMTT anstelle von TTMMJJ?
Dev Aggarwal
5

Ich bin überrascht, dass es keinen einzigen Formatierer gibt, der ein Standardformat (und ein sicheres Format) zum Anhängen im Dateinamen zurückgibt - das Format der Zeit, das wir einfach schreiben könnten FD.write('mybackup'+time.strftime('%(formatter here)') + 'ext'

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

Hier sind einige, die ich brauchte, um den Datums- / Zeitstempel in den Ordnernamen aufzunehmen, um Dateien von einem Web-Scraper zu sichern.

# 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)
Rich Lysakowski PhD
quelle
Ein sicherer Weg, um Ihren Weg zu erstellen, könnte sein: folder_to_save_files = shutil.os.path.join(drive_letter, folder_name +folder_time)(auch einimport shutil Anweisung kann die import osAnweisung ersetzen )
oneindelijk