2016-08-06 50 views
2

ich eine CSV-Datei mit einem Dateinamen im folgenden Format erstellen möchten:Formatierung von Datum, Uhrzeit und String für Dateinamen

„Tag-Monat-Jahr Stunde: Minute-malware_scan.csv“

Beispiel: "6-8-2016 21: 45-malware_scan.csv"

Der erste Teil des Dateinamens wird durch das tatsächliche Datum und die Uhrzeit zum Zeitpunkt der Dateierstellung gebildet, stattdessen ist "-malware_scan.csv" eine feste Zeichenfolge.

Ich weiß, dass, um das Datum und die Uhrzeit zu erhalten, ich das Time oder Datetime-Modul und die Funktion strftime() für die Formatierung verwenden sollte.

Zuerst habe ich versucht, mit:

t = datetime.datetime.now() 
formatted_time = t.strftime(%d-%m-%y %H:%M) 
filename = formatted_time + "-malware_scan.csv" 
with open(filename, "a") as f: 
    ............... 

ich nicht das erwartete Ergebnis bekommen haben, so habe ich versucht, einen anderen Weg:

i = datetime.datetime.now() 
file_to_open = "{day}-{month}-{year} {hour}:{minute}-malware_scan.csv".format(day = i.day, month = i.month, year = i.year, hour = i.hour, minute = i.minute) 
with open(file_to_open, "a") as f: 
    ....................... 

auch den Code unter Verwendung der oben ich das nicht bekommen erwartetes Ergebnis. Ich bekomme einen Dateinamen dieser Art: "6-8-2016 21". Tag, Monat, Jahr und Stunde werden angezeigt, aber die Minuten und der Rest der Zeichenfolge (-malware_scan.csv) werden nicht angezeigt.

Ich konzentriere mich nur auf den Dateinamen mit dieser Frage, nicht auf die CSV selbst schreiben, deren Code entfällt.

+2

Was war das Ergebnis mit Ihrem ersten Versuch? Weil es gut formatiert, wenn ich es versuche. '% d-% m-% y% H:% M' sollte eine Zeichenkette sein (mit") btw. – Munchhausen

+0

Es formatiert ok :) –

+3

Bedeutet ':' ist in Dateinamen nicht erlaubt, zumindest unter Windows –

Antwort

1

Das Zeichen : ist für Dateinamen auf dem PC nicht zulässig. Sie könnten den : Separator vollständig verwerfen:

>>> from datetime import datetime 
>>> t = datetime.now() 
>>> formatted_time = t.strftime('%d-%m-%y %H%M') 
>>> formatted_time 
'06-08-16 2226' 
>>> datetime.strptime(formatted_time, '%d-%m-%y %H%M') 
datetime.datetime(2016, 8, 6, 22, 26) 

Oder das Zeichen mit einem Unterstrich oder Bindestrich ersetzen.

+0

Vielen Dank Das Entfernen des Doppelpunkts reichte aus, um das Problem zu lösen, ich wusste, dass einige Zeichen nicht erlaubt sind, aber ich dachte wirklich nicht darüber nach. – Fabio

0

Dank an Moses Koledoye für das Erkennen des Problems. Ich dachte, ich hätte einen Fehler im Python-Code gemacht, aber das Problem waren eigentlich die Zeichen des Dateinamens.

Nach MSDN die folgenden sind reservierte Zeichen, die nicht in einem Dateinamen unter Windows verwendet werden können:

< (less than) 
> (greater than) 
: (colon) 
" (double quote) 
/(forward slash) 
\ (backslash) 
| (vertical bar or pipe) 
? (question mark) 
* (asterisk)