Ungewollte Leerzeichen beim verketten von Variablen

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
FelixGoesPython
User
Beiträge: 17
Registriert: Mittwoch 25. September 2019, 08:15

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')
Benutzeravatar
snafu
User
Beiträge: 6866
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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...
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

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"
Zuletzt geändert von Sirius3 am Donnerstag 3. Oktober 2019, 16:12, insgesamt 1-mal geändert.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

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'
FelixGoesPython
User
Beiträge: 17
Registriert: Mittwoch 25. September 2019, 08:15

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"
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

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?
Antworten