Qu'est-ce qui ne va pas avec la façon dont je rejoins mon chemin ici?

Tout sauf le premier élément de la liste sera correctement joint.

J'attrape un chemin depuis un fichier déposé dans tkinter.

C.-à-d. filedialog.askdirectory ()

Exemple de chemin:

PATH = "C:/MyUserName/Desktop/SomeDir"

Qu'est-ce que je fais:

os.path.join(*(PATH.split("/") + ["somefile.txt"]))

Cela imprimera les éléments suivants:

C:MyUserName/Desktop/SomeDir/somefile.txt

Pourquoi perd-il le premier /?

1
Pythonista 10 mars 2016 à 09:10

3 réponses

Meilleure réponse

J'avais besoin de convertir mon chemin initial en utilisant os.normpath. J'obtenais une entrée de fichier de log de tkinter, puis j'essayais d'utiliser le style / code de chemin ci-dessus dans la question pour accéder / créer des fichiers.

En raison des mauvais joints / séparateurs sur les fenêtres, cela provoquait des erreurs.

3
Pythonista 10 mars 2016 à 06:22

Vous utilisez Windows, non?

Depuis les documents:

Sous Windows, la lettre de lecteur n'est pas réinitialisée lorsqu'un composant de chemin absolu (par exemple, r '\ foo') est rencontré. Si un composant contient une lettre de lecteur, tous les composants précédents sont jetés et la lettre de lecteur est réinitialisée. Notez qu'étant donné qu'il existe un répertoire en cours pour chaque lecteur, os.path.join ("c:", "foo") représente un chemin d'accès par rapport au répertoire en cours sur le lecteur C: (c: foo), pas c: \ foo .

Cela signifie que c: foo est en fait un chemin correct. Essayez os.path.abspath('c:foo') et os.path.abspath('c:\\foo') pour voir la différence. Le premier chemin est un chemin relatif sur le lecteur c et le second est un chemin absolu.

2
Felix 10 mars 2016 à 06:24

Windows conserve un chemin d'accès actuel pour tous les lecteurs. C:MyUserName/Desktop/SomeDir/somefile.txt et C:/MyUserName/Desktop/SomeDir/somefile.txt sont tous deux valides et il n'y a aucun moyen pour ntpath.join de savoir si vous vouliez le chemin relatif au lecteur ou le chemin absolu du lecteur.

2
tdelaney 10 mars 2016 à 06:27