Warum sollte os.path.join über die Verkettung von Zeichenfolgen verwendet werden?

81

Ich denke, ich kann hier kein größeres Bild sehen. Aber im Grunde habe ich keine Ahnung, warum Sie os.path.joinanstelle der normalen String-Verkettung verwenden würden?

Ich habe hauptsächlich VBScript verwendet, daher verstehe ich den Sinn dieser Funktion nicht.

user1905410
quelle

Antworten:

80

tragbar

Schreiben Sie Dateipfadmanipulationen einmal und es funktioniert kostenlos auf vielen verschiedenen Plattformen. Das abgrenzende Zeichen wird entfernt, was Ihre Arbeit erleichtert.

Clever

Sie müssen sich keine Sorgen mehr machen, ob dieser Verzeichnispfad einen abschließenden Schrägstrich hatte oder nicht . os.path.joinwird es hinzufügen, wenn es muss.

klar

Durch os.path.joindie Verwendung wird anderen Personen, die Ihren Code lesen, klar, dass Sie mit Dateipfaden arbeiten. Benutzer können den Code schnell durchsuchen und feststellen, dass es sich um einen Dateipfad handelt. Wenn Sie sich entscheiden, es selbst zu erstellen, werden Sie den Leser wahrscheinlich davon abhalten, tatsächliche Probleme mit Ihrem Code zu finden: "Hmm, einige String-Concats, eine Substitution. Ist dies ein Dateipfad oder was? Gah! Warum hat er ihn nicht verwendet os.path.join?" :) :)

Gemeinschaft
quelle
3
Vielen Dank. Die Smart- und Clear-Teile sind genau die Art von Argumentation, nach der ich gesucht habe, als ich mir dieselbe Frage gestellt habe: Das tragbare Teil kann leicht durch Verkettung mit "/" anstelle von "nur Windows" \ "erreicht werden, also ist es eine Art Streit.
Léo Germond
3
Punkt 3 hat seine Berechtigung, aber 1 und 2 sind umstritten. / funktioniert unter Windows. Welches Betriebssystem verwenden Sie jemals, das es nicht unterstützt? Und doppelte nachgestellte Schrägstriche werden vom OS / FS für Sie normalisiert. Ich sage nicht, nicht verwenden os.path.join, aber wenn Sie dies tun, tun Sie es aus den richtigen Gründen. Auf os.path.join wird viel Frachtkult betrieben. "Eine dumme Konsequenz ist der Hobgoblin der kleinen Köpfe", wie sie sagen.
Hraban
5

Funktioniert unter Windows mit '\' und Unix (einschließlich Mac OS X) mit '/'.

Für posixpath ist hier der einfache Code

In [22]: os.path.join??
Type:       function
String Form:<function join at 0x107c28ed8>
File:       /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.py
Definition: os.path.join(a, *p)
Source:
def join(a, *p):
    """Join two or more pathname components, inserting '/' as needed.
    If any component is an absolute path, all previous path components
    will be discarded."""
    path = a
    for b in p:
        if b.startswith('/'):
            path = b
        elif path == '' or path.endswith('/'):
            path +=  b
        else:
            path += '/' + b
    return path

Ich habe keine Fenster, aber das gleiche sollte mit '\' vorhanden sein.

locojay
quelle
5
Seltsamerweise /funktioniert es jedoch unter Windows mit CPython…
Eric O Lebigot
1
Dies. Warum sollten Sie versuchen, Pfadtrennzeichen usw. selbst zu handhaben, wenn es eine Funktion gibt, die dies für Sie erledigt?
Blair
1
Ich habe die Kommentare gelesen und sie verbinden Pfade miteinander. Ich kann einfach nicht verstehen, warum ich sie jemals verwenden würde. Ich entschuldige mich dafür, dass ich das Gesamtbild eindeutig nicht sehe.
user1905410
@ user1905410 Es geht um mehr als das, wie in der Fine Documentation beschrieben.
@ user1905410 Es geht um mehr als das, wie in der Feinen Dokumentation beschrieben.
0

Es ist OS-unabhängig. Wenn Sie Ihre Pfade als C: \ Was auch immer fest codieren, funktionieren sie nur unter Windows. Wenn Sie sie mit dem Unix-Standard "/" fest codieren, funktionieren sie nur unter Unix. os.path.join erkennt das Betriebssystem, unter dem es ausgeführt wird, und verbindet die Pfade mit dem richtigen Symbol.

bkaiser
quelle
7
If you hardcode them with the Unix standard "/" they will only work on Unix.Das ist falsch. "/" funktioniert gut unter Windows UND Linux / Unix / BSD / Darwin.
Léo Germond