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:

Code: Alles auswählen

dateiname = f'{jahr}{kw}.csv'
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?