Da es sich im vorliegenden Fall um einen Raspberry-PI-Anwendung handelt, ist das Thema Plattformunabhaengikeit wenig relevant. Bevor einem die falschen Pfade um die Ohren fliegen, hat schon die fehlende GPIO am Windows-PC einem das Skript verhagelt.
Insofern ist das ein bisschen viel Aufriss um so wenig. Ja, man sollte os.path.join verwenden. Alleine schon um dem aetzenden rum-ge-plusse ein Ende zu machen. Aber wirklich was gewinnen fuer den konkreten Fall tut man nicht.
Datei die ich speichere monatlich umbenennen
@kbr:
An sich schrieb ich das ja schon. C:\Foo ist genau so wenig zusammengesetzt wie /home/foo. Diese Dinge stehen bereits fest. Vielleicht ist es so etwas griffiger:
Hier besteht die Zusammensetzung, von der ich spreche, in dem Moment wo der BASE_PATH mit dem name vernüpft wird. BASE_PATH selbst kann durchaus plattformspezifische Pfadtrenner haben, denn die Windows-Pfadangabe wäre auf einer "falschen" Plattform ja ohnehin unsinnig. Die Pfadangabe sollte halt nur abstrahiert werden, wo dies einen praktischen Mehrwert hat, z.B. wenn eine Datei in einem festgelegten Verzeichnis angelegt werden soll oder wenn man für sein Programm Unterverzeichnisse hat, die ab einem bestimmten Punkt im Verzeichnisbaum überall gleich sind. Ich weiß nicht, wie ich das noch anders erklären soll...
An sich schrieb ich das ja schon. C:\Foo ist genau so wenig zusammengesetzt wie /home/foo. Diese Dinge stehen bereits fest. Vielleicht ist es so etwas griffiger:
Code: Alles auswählen
BASE_PATH = r'C:\Foo' if on_windows else '/home/foo'
def write_file(name, text):
filename = os.path.join(BASE_PATH, name)
with open(filename, 'w') as outfile:
outfile.write(text)
So sieht's aus. Als grundsätzliche Alternative zum Zusammensetzen via Plus-Zeichen kann man es auf jeden Fall einsetzen. Aber kbr bemängelte ja quasi, dass os.path.join('/pfad/zum/ordner', dateiname) nicht geschrieben werden darf, sondern stattdessen os.path.join('/pfad', 'zum', 'ordner', dateiname) geschrieben werden müsste, weil es konsequenter sei. Und dies halte ich für übertrieben und als Ratschlag eigentlich sogar in dieser Form für falsch. Muss aber jetzt auch keine mehrseitige Diskussion werden...__deets__ hat geschrieben:Ja, man sollte os.path.join verwenden. Alleine schon um dem aetzenden rum-ge-plusse ein Ende zu machen. Aber wirklich was gewinnen fuer den konkreten Fall tut man nicht.
Wenn ich im Vorfeld geahnt hätte, was ich da lostrete ...
In der Praxis werden die Basispfade zu Beginn erstellt, unter Einbeziehung von os.path.join, und dann Konstanten zugewiesen. Und später dann, bei Bedarf, gleichfalls mit os.path.join erweitert; glücklicherweise bleibt mir Windows dabei erspart. Wenn dann aber irgendwo ein von Hand zusammengesetzter Pfad mit eingefügt wird, ist das Vorgehen an sich sinnlos, da die Konsistenz nicht gewahrt bleibt - auch wenn dies unter unixoiden Systemen nicht weiter auffällt. Das war alles, nicht mehr, nicht weniger.
In der Praxis werden die Basispfade zu Beginn erstellt, unter Einbeziehung von os.path.join, und dann Konstanten zugewiesen. Und später dann, bei Bedarf, gleichfalls mit os.path.join erweitert; glücklicherweise bleibt mir Windows dabei erspart. Wenn dann aber irgendwo ein von Hand zusammengesetzter Pfad mit eingefügt wird, ist das Vorgehen an sich sinnlos, da die Konsistenz nicht gewahrt bleibt - auch wenn dies unter unixoiden Systemen nicht weiter auffällt. Das war alles, nicht mehr, nicht weniger.