8
votes

Quel module de chemin ou quel classe Les personnes Python utilisent-elles au lieu de OS.Path?

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 OS.Path pour joindre et fractionnement des chemins? Avez-vous utilisé:


1 commentaires

On dirait que python 3 a pathlib et il y a Backport pour Python 2 .


3 Réponses :


11
votes

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)


3 commentaires

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 qu'une chaîne. Exemple: avec build_dir.child ('config.yaml'). Ouvrir () comme f vs avec ouvert (os.path.join (build_dir, "config.yaml")) - Le flux logique est plus systématiquement de gauche à droite et avec moins de parenthèses imbriquées, aussi plus facile à lire et à comprendre.



-1
votes

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.

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.


0 commentaires

2
votes

Un tour simple mais utile est ceci:

Import OS

chemin = os.path.join

Puis, au lieu de cela:

os.path.join (build_dir, os.path.basename (source_file))

Vous pouvez le faire:

chemin (build_dir, chemin (source_file))


2 commentaires

Je fais tout le temps, mais j'utilise PJ au lieu de chemin . :-)


Souhaitez-vous expliquer pourquoi vous pouvez remplacer os.path.basename par une autre instance de chemin = os.path.join ? Parce que pour moi, os.path.join (r "c: \ build", os.path.basename (r "d: \ source \ code.py")) retourne 'c : \\ construire \\ code.py ', tandis que chemin (r "c: \ build", chemin (r "d: \ source \ code.py")) retourne < Code> 'd: \\ source \\ code.py' .