mixte des barres obliques avec os.chemin d'accès.rejoindre sur windows
J'ai tendance à utiliser uniquement des barres obliques pour les chemins ('/') et python est heureux avec elle aussi sur windows.
Dans la description de l'os.chemin d'accès.rejoindre il dit que c'est le bon moyen si vous voulez aller à la croix-plate-forme. Mais quand je l'utilise je mêlent des barres obliques:
import os
a = 'c:/'
b = 'myFirstDirectory/'
c = 'mySecondDirectory'
d = 'myThirdDirectory'
e = 'myExecutable.exe'
print os.path.join(a, b, c, d, e)
# Result:
c:/myFirstDirectory/mySecondDirectory\myThirdDirectory\myExecutable.exe
Est-ce correct? Dois-je vérifier et corriger par la suite ou il ya une meilleure façon?
Grâce
EDIT:
J'ai aussi mêlent des barres obliques, lors de la demande pour les chemins
import sys
for item in sys.path:
print item
# Result:
C:\Program Files\Autodesk\Maya2013.5\bin
C:\Program Files\Autodesk\Maya2013.5\mentalray\scripts\AETemplates
C:\Program Files\Autodesk\Maya2013.5\Python
C:\Program Files\Autodesk\Maya2013.5\Python\lib\site-packages
C:\Program Files\Autodesk\Maya2013.5\bin\python26.zip\lib-tk
C:/Users/nookie/Documents/maya/2013.5-x64/prefs/scripts
C:/Users/nookie/Documents/maya/2013.5-x64/scripts
C:/Users/nookie/Documents/maya/scripts
C:\Program Files\Nuke7.0v4\lib\site-packages
C:\Program Files\Nuke7.0v4/plugins/modules
os
est intelligent et les œuvres qui les barres obliques dont vous avez besoin pour votre système d'exploitation. Pour l'utiliser correctement, ne pas mettre les barres obliques dans vos chaînes a,b,c,d et e - os pour les ajouter.- Je vois, mais si je suis mélangé les barres obliques, lors de la demande d'un chemin d'accès? (J'ai mis à jour le premier post avec un exemple)
- vous pouvez utiliser
os.path.normpath(mixed_slashes_path)
et obtenir les barres obliques normalisé. Oh, et je devine que vous êtes en train de faire cela à l'intérieur de Maya; il fait des choses très UNIX-like, donc les barres obliques dans les il y dans les chemins que c'est ajouter pour vous.
Vous devez vous connecter pour publier un commentaire.
Vous êtes maintenant en fournissant une partie de la slash à vous-même et de laisser
os.chemin d'accès.join
choisir d'autres. Il est préférable de laisser python prendre tous ou de leur fournir tous les vous-même. Python utilise des barres obliques inverses pour la dernière partie du chemin, parce que les barres obliques inverses sont par défaut sur Windows.Je n'ai pas testé, mais j'espère que cette aide. Il est plus courant d'avoir un chemin d'accès de base et de n'avoir à en rejoindre un autre élément, la plupart des fichiers.
Par le chemin; vous pouvez utiliser
os.sep
pour ces moments vous voulez avoir le meilleur séparateur pour le système d'exploitation python est en cours d'exécution sur.Edit: de dash-tom-bang unis, apparemment pour Windows, vous avez besoin d'inclure un séparateur pour la racine du chemin d'accès. Sinon, vous créer un chemin d'accès relatif plutôt qu'absolu.
os.path.join
. De cette façon, vous vous assurez queos.path.join
ne pas prendre de mauvaises décisions basées sur les probablement une mauvaise entrée./
et\
, donc pas de problème ici.C:
doit être spécifié. Voir stackoverflow.com/questions/2422798.os.path.normpath()
fonction afin de normaliser les chemins d'accès si vous êtes inquiet au sujet de mixte des barres obliques dans les chemins. Il n'est pas nécessaire de les éviter, de toute façon, comme Windows est heureux d'accepter les chemins avec un mélange de barres obliques.Vous pouvez utiliser
.replace()
aprèspath.join()
pour assurer les barres obliques sont corrects:Cela donne à la sortie:
Comme @sharpcloud suggéré, il serait préférable de supprimer les barres obliques de vos chaînes d'entrée, cependant, c'est une alternative.
posixpath.join(a, b, c, d, e)
qui vous donnera toujours des barres obliques.posixpath.join()
renvoie toujours mélangé les barres obliques.os.path.join('foo', 'bar')
m'a donné'a\\b'
etposixpath.join('foo', 'bar')
m'a donné'a/b'
.os.path.join()
(et le module importations) ne remplace pas les barres obliques dans les cordes, c'est s'inscrire, ce qui peut conduire à des mélanges de barres obliques (comme c'est le cas dans la question).os.abspath()
à normaliser toutes sortes de choses. Peut-être il y a quelque chose dans posixpath qui va satisfaire?os.path.normpath()
. Sur Windows, il va normaliser le chemin à l'aide de barres obliques vers l'arrière. Si vous avez d'avoir des barres obliques, alors vous êtes probablement traiter avec des Url et pas de chemins, afin d'utiliser l'URL des méthodes spécifiques telles queurllib.parse.urljoin()
(nécessite l'Url, pas seulement un chemin d'accès).essayez d'utiliser abspath (à l'aide de python 3)
De SORTIE:
c:\myFirstDirectory\mySecondDirectory\myThirdDirectory\myExecutable.exe
Le processus est terminé avec le code de sortie 0
os.path.abspath()
appelsos.path.normpath()
premier. Vous pouvez obtenir le même ici, il suffit d'appeleros.path.normpath()
.MODIFIER basé sur commentaire:
path = os.path.normpath(path)
Ma réponse précédente manque de capacité de manipulation des caractères d'échappement et donc ne doit pas être utilisé:
Deuxième, les colle ensemble en utilisant le symbole correct.
"/usr/my\ files"
traduira"usr","my"," files"
au lieu de"usr","my files"
os.path.normpath()
.os
ajoute des barres obliques pour vous et fait en sorte de ne pas reproduire les barres obliques afin de les omettre dans vos cordesSupplémentaires:
Je ne suis pas sûr pourquoi vous avez mélangé des barres obliques dans votre sys chemin (avez-vous utilisé un système d'exploitation linux pour ajouter certains dossiers?) mais essayez de vérifier
print os.path.isdir(os.path.join('C:','Users','nookie'))
.Si c'est
True
puisos
fonctionne pour votre mélange de barres obliques.De toute façon, je voudrais éviter de coder en dur les noms de répertoire dans votre programme. Votre
sys.path
boucle for est un moyen sûr de sortir ces répertoires. Vous pouvez ensuite utiliser certaines méthodes string, ou regex pour choisir le dossier de votre choix.C:myFirstDirectory\mySecondDirectory...
)Si pour une raison quelconque, vous devez fournir les chemins vous-même et vous avez utiliser quoi que ce soit au-dessus de python 3.4, vous pouvez utiliser pathlib
Je l'utilise quand j'ai besoin d'un utilisateur à indiquer l'emplacement d'un répertoire actif et mon code a été à la recherche vers le haut en utilisant windows chaînes de chemin