web-dev-qa-db-fra.com

Pourquoi utiliser os.path.join sur la concaténation de chaînes?

Je ne suis pas en mesure de voir la vue d'ensemble ici, je pense; mais au fond, je n'ai aucune idée de la raison pour laquelle vous utiliseriez os.path.join au lieu d'une concaténation de chaîne normale?

J'ai principalement utilisé VBScript, donc je ne comprends pas l'intérêt de cette fonction.

67
user1905410

Portable

Écrivez des manipulations de chemin de fichier une fois et cela fonctionne sur de nombreuses plateformes différentes, gratuitement. Le caractère délimitant est abstrait, ce qui facilite votre travail.

Intelligent

Vous n'avez plus besoin de vous inquiéter si ce chemin de répertoire avait un barre oblique de fin ou non . os.path.join l'ajoutera si nécessaire.

Clair

En utilisant os.path.join indique clairement aux autres personnes lisant votre code que vous travaillez avec des chemins de fichiers. Les gens peuvent parcourir rapidement le code et découvrir qu'il s'agit intrinsèquement d'un chemin de fichier. Si vous décidez de le construire vous-même, vous empêcherez probablement le lecteur de trouver des problèmes réels avec votre code: "Hmm, quelques concats de chaîne, une substitution. Est-ce un chemin de fichier ou quoi? Gah! Pourquoi n'a-t-il pas utilisé os.path.join? ":)

67
user1902824

Fonctionne sous Windows avec '\' et Unix (y compris Mac OS X) avec '/'.

pour posixpath, voici le code simple

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

n'ont pas de fenêtres mais la même chose devrait être là avec '\'

5
locojay