Seite 1 von 1
Ungewollte Leerzeichen beim verketten von Variablen
Verfasst: Donnerstag 3. Oktober 2019, 15:43
von FelixGoesPython
Hallo Zusammen,
ich würde gerne einen Dateinamen und eine Vorgangsnummer generieren. Der Dateiname soll lauten Jahr (2 stellig) + KW . csv also z.B. "1940.csv". Leider erhalte ich mit untenstehendem Code folgendes:
('19', 40, '.csv')
19 40 .csv
Kann Jemand helfen?
#Dateinamen & Vorgangsnummer
##Kalenderwoche
import datetime
KW = (datetime.date.today().isocalendar()[1])
str(KW)
##Jahr
import time
Jahr = (time.strftime('%y'))
str(Jahr)
##Dateiname
DateinameVorgaengeKW = Jahr, KW, ".csv"
print(DateinameVorgaengeKW)
print(Jahr,KW,'.csv')
Re: Ungewollte Leerzeichen beim verketten von Variablen
Verfasst: Donnerstag 3. Oktober 2019, 15:47
von snafu
Ich würde das als f-String formatieren:
Variablen schreibt man in Python übrigens klein, wenn man sich an gutem Stil (Stichwort: "PEP 8") halten will...
Re: Ungewollte Leerzeichen beim verketten von Variablen
Verfasst: Donnerstag 3. Oktober 2019, 15:58
von Sirius3
Du generierst keinen Dateinamen, sondern gibts drei Variablen aus.
Und bei der Ausgabe wird dazwischen ein Leerzeichen ausgegeben, für die bessere Lesbarkeit.
Warum generierst Du das Jahr per strftime, den Wochentag aber per datetime?
Da Du zweimal das aktuelle Datum damit abfragst, kann es vorkommen, dass das die beiden nicht zusammenpassen. Daher immer nur einmal das Datum abfragen. Zudem benutzt Du die ISO-Woche, aber nicht das ISO-Jahr. Weißt Du, was das ISO-Jahr ist und willst Du es tatsächlich benutzen?
Die Aufrufe von `str` sind überflüssig, da Du mit dem Rückgabewert nichts machst.
Code: Alles auswählen
import datetime
year, week, weekday = datetime.date.today().isocalendar()
filename = f"{year%100:02d}{week:02d}.csv"
oder
Code: Alles auswählen
import datetime
today = datetime.date.today()
filename = f"{today:%g%V}.csv"
Re: Ungewollte Leerzeichen beim verketten von Variablen
Verfasst: Donnerstag 3. Oktober 2019, 16:05
von DasIch
Du solltest Bedenken dass die Kalendarwoche mit der Woche beginnt, in welche der erste Donnerstag fällt. Dementsprechend kann es schonmal sein dass du von der Kalendarwoche her schon vor Neujahr im neuen Jahr bist. Du bestimmst das Jahr also falsch. Außerdem gibt es einen ISO Standard um Kalendarwochen anzugeben.
Hält man sich an dass alles kommt sowas bei rum:
Code: Alles auswählen
In [5]: from datetime import date
In [6]: dt = date.today()
In [7]: dt.strftime('%G-W%V')
Out[7]: '2019-W40'
Re: Ungewollte Leerzeichen beim verketten von Variablen
Verfasst: Donnerstag 3. Oktober 2019, 18:31
von FelixGoesPython
Super, vielen Dank! Alle Antworten ware sehr hilfreich. Habe es jetzt so gelöst:
#Formel für Kalenderwoche die auch zum Jahreswechsel richtig funktioniert
from datetime import date
dt = date.today()
dateiname = f"Vorgaenge/{dt.strftime('%g%V')}.csv"
Re: Ungewollte Leerzeichen beim verketten von Variablen
Verfasst: Donnerstag 3. Oktober 2019, 18:39
von Sirius3
Nein! Wenn man Format-Strings benutzt, braucht man keine strftime. Das ist ja doppelt. Und bitte keine kryptischen Abkürzungen. Was soll `dt` den heißen?