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.

Code: Alles auswählen

zeit = time.strftime("%Y-%m-%d_%H:%M:%S %Y", parsed)
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