Dateiname mit Datum

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
stefan-dd
User
Beiträge: 6
Registriert: Dienstag 3. Januar 2017, 15:19

Hallo,
ich habe ein Pythonscript mit dem ich den Füllstand meiner Zisterne messe. Die Messwerte werden in eine txt Datei geschrieben.
Nun möchte ich im Dateinamen die aktuelle Jahreszahl mit unterbringen.

Code: Alles auswählen

sys.stdout = open ('/opt/fhem/log/wasserstand_sta2017.log','a')
Das Datum verwende ich bereits.

Code: Alles auswählen

zeit = time.strftime("%Y-%m-%d_%H:%M:%S %Y", parsed)
Wie bekomme ich die aktuelle Jahreszahl in den Dateinamen?
Sirius3
User
Beiträge: 17748
Registriert: Sonntag 21. Oktober 2012, 17:20

@stefan-dd: es ist ungewöhnlich, `sys.stdout` umzubiegen. Normalerweise Öffnet man eine Datei und schreibt direkt hinein. Um Daten in Strings hineinzuformatieren benutzt man `.format`, also:

Code: Alles auswählen

logfilename = "/opt/fhem/log/wasserstand_sta{0:%Y}.log".format(datetime.datetime.now())
with open(logfilename, "a") as logfile:
    logfile.write(blabla)
stefan-dd
User
Beiträge: 6
Registriert: Dienstag 3. Januar 2017, 15:19

Gut, das habe ich verstanden.
Jetzt habe ich es so, nochmal komplett. Geschrieben wird die genaue Zeit mit Datum, das Jahr extra und die Daten (heißen gerundet).

Code: Alles auswählen

temp = sys.stdout
sys.stdout = open ('/opt/fhem/log/wasserstand_sta2017.log','a')
print zeit,("%.0f" % gerundet)
sys.stdout = temp
Jetzt würde ich gern dein Codesegment verwenden.
Was macht? .format(datetime.datetime.now())
Wenn ich es richtig erkenne, müsste ich es so einsetzen. Funktioniert aber nicht.

Code: Alles auswählen

logfilename = "/opt/fhem/log/wasserstand_sta{0:%Y}.log".format(datetime.datetime.now())
with open(logfilename, "a") as logfile:
logfile.write zeit,("%.0f" % gerundet)
Wo ich den Code damals zusammengebastelt habe bin ich an deiner Variante zum Schreiben gescheitert. Was müsste man noch anpassen?
Sirius3
User
Beiträge: 17748
Registriert: Sonntag 21. Oktober 2012, 17:20

@stefan-dd: ».write« kann nur Strings schreiben, also mußt Du die zwei Teile zu einem String formatieren:

Code: Alles auswählen

logfilename = "/opt/fhem/log/wasserstand_sta{0:%Y}.log".format(datetime.datetime.now())
with open(logfilename, "a") as logfile:
    logfile.write("{0}, {1:.0f}".format(zeit, gerundet))
stefan-dd
User
Beiträge: 6
Registriert: Dienstag 3. Januar 2017, 15:19

Was bedeutet das Datetime? Fehlen da noch Datumswerte?
Er bringt mir "NameError: name 'Datetime' is not defined"
Sirius3
User
Beiträge: 17748
Registriert: Sonntag 21. Oktober 2012, 17:20

es fehlt ein »import datetime«.
BlackJack

Oder es fehlt die Info das Gross- und Kleinschreibung bei Python eine Rolle spielt. :-)
stefan-dd
User
Beiträge: 6
Registriert: Dienstag 3. Januar 2017, 15:19

Jetzt passt es fast. Das Komma war kein Problem, jetzt fehlt noch ein Zeilensprung. Wie fügt man diesen ein?

[codebox=text file=Unbenannt.txt]2017-01-02_00:01:01 2017 8220
2017-01-03_00:01:01 2017 8200
2017-01-03_19:23:41 2017, 83902017-01-03_19:27:05 2017, 8390[/code]
Sirius3
User
Beiträge: 17748
Registriert: Sonntag 21. Oktober 2012, 17:20

Zeilenumbruch macht man mit '\n':

Code: Alles auswählen

 logfile.write("{0} {1:.0f}\n".format(zeit, gerundet))
stefan-dd
User
Beiträge: 6
Registriert: Dienstag 3. Januar 2017, 15:19

Danke, Perfekt
Antworten