Vous vous demandez simplement combien de personnes utilisent un module de chemin dans Python, tel que Jason Orendorff, celui de Jason Orendorff, au lieu d'utiliser Je sais que le module de chemin de Jason a été transformé en PEP 355 A > et rejeté par la BDFL. Cela semble que c'était principalement parce qu'il a essayé de tout faire dans une classe. P> Notre cas d'utilisation est principalement de simplifier la jonction et la scission des composants des chemins, nous serions donc assez heureux si une classe unique mis en œuvre le type d'opérations Split / Rejoignez. Qui ne voudrait pas faire cela: p> ou ceci: p> au lieu de ceci: p> OS.Path Code> pour joindre et fractionnement des chemins? Avez-vous utilisé:
3 Réponses :
Je peux récupérer un programme Python et interpréter la méthode standard actuelle sans hésitation - c'est explicite et il n'y a pas d'ambiguïté:
path(build_dir, path(source_file).name)
Entendre entendre! Il n'y a rien d'aussi horrible avec le module Standard OS.Path pour justifier d'ajouter plus de dépendances à votre projet. Si vous avez un problème de construction particulièrement velu de chemin, comme la construction d'un trajet d'une hiérarchie d'objet, alors pourquoi ne pas envelopper cela dans une fonction? Le prochain programmeur vous remerciera d'avoir encapsulé et de ne pas le faire apprendre et déboguer un autre module.
Merci pour la réponse, Matthew. Et bon commentaire, Theran: Vous avez raison de factoriser des choses dans des fonctions - cela a déjà simplifié mon script. En fait, je pense que les deux d'entre vous nous ont convaincus. De plus, je suppose qu'il y a toujours "du parc d'importation OS" si nous voulons juste une brièveté un peu plus de brièveté.
Pas d'ambiguïté, correcte, mais c'est une douleur à écrire et une douleur à lire. Je préférerais m'occuper d'un objet de chemin immuable comme Java's java.nio.file.path code>
qu'une chaîne. Exemple: avec build_dir.child ('config.yaml'). Ouvrir () comme f code> vs
avec ouvert (os.path.join (build_dir, "config.yaml")) Code> - Le flux logique est plus systématiquement de gauche à droite et avec moins de parenthèses imbriquées, aussi plus facile à lire et à comprendre.
Division des chaînes pour rejoindre les chemins peut sembler un "truc soigné", mais c'est précisément ce genre de chose que les programmeurs python aiment éviter (et BTW, programmeurs dans la plupart des autres langueurs.) Le module OS.Path est largement utilisé et facilement compris par tous. Faire des choses géniales avec des opérateurs surchargés, d'autre part est déroutante, il altère la lisibilité de votre code, qui est censée être l'un des points forts de Python. P>
programmeurs C ++, d'autre part, aime ce genre de chose. C'est peut-être l'une des raisons pour lesquelles le code C ++ peut être si difficile à lire. P>
Un tour simple mais utile est ceci: p>
Import OS p>
chemin = os.path.join p> blockQuote>
Puis, au lieu de cela: p>
os.path.join (build_dir, os.path.basename (source_file)) p> blockQuote>
Vous pouvez le faire: p>
chemin (build_dir, chemin (source_file)) p> blockQuote>
Je fais tout le temps, mais j'utilise PJ code> au lieu de
chemin code>. :-)
Souhaitez-vous expliquer pourquoi vous pouvez remplacer os.path.basename code> par une autre instance de
chemin = os.path.join code>? Parce que pour moi,
os.path.join (r "c: \ build", os.path.basename (r "d: \ source \ code.py")) code> retourne
'c : \\ construire \\ code.py ' code>, tandis que
chemin (r "c: \ build", chemin (r "d: \ source \ code.py")) code> retourne < Code> 'd: \\ source \\ code.py' code>.
On dirait que python 3 a pathlib et il y a Backport pour Python 2 .