Seite 1 von 1
Dateiname mit Datum
Verfasst: Dienstag 3. Januar 2017, 15:40
von stefan-dd
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.
Wie bekomme ich die aktuelle Jahreszahl in den Dateinamen?
Re: Dateiname mit Datum
Verfasst: Dienstag 3. Januar 2017, 17:20
von Sirius3
@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)
Re: Dateiname mit Datum
Verfasst: Dienstag 3. Januar 2017, 18:07
von stefan-dd
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?
Re: Dateiname mit Datum
Verfasst: Dienstag 3. Januar 2017, 18:27
von Sirius3
@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))
Re: Dateiname mit Datum
Verfasst: Dienstag 3. Januar 2017, 18:55
von stefan-dd
Was bedeutet das Datetime? Fehlen da noch Datumswerte?
Er bringt mir "NameError: name 'Datetime' is not defined"
Re: Dateiname mit Datum
Verfasst: Dienstag 3. Januar 2017, 19:04
von Sirius3
es fehlt ein »import datetime«.
Re: Dateiname mit Datum
Verfasst: Dienstag 3. Januar 2017, 19:31
von BlackJack
Oder es fehlt die Info das Gross- und Kleinschreibung bei Python eine Rolle spielt.

Re: Dateiname mit Datum
Verfasst: Dienstag 3. Januar 2017, 19:47
von stefan-dd
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]
Re: Dateiname mit Datum
Verfasst: Dienstag 3. Januar 2017, 19:54
von Sirius3
Zeilenumbruch macht man mit '\n':
Code: Alles auswählen
logfile.write("{0} {1:.0f}\n".format(zeit, gerundet))
Re: Dateiname mit Datum
Verfasst: Dienstag 3. Januar 2017, 20:07
von stefan-dd
Danke, Perfekt