J'ai été piqué de nombreuses fois par des personnes qui écrivaient leurs propres fonctions de manipulation de chemins et se trompaient. Espaces, barres obliques, barres obliques inversées, deux-points -- les possibilités de confusion ne sont pas infinies, mais les erreurs sont facilement commises de toute façon. C'est pourquoi je suis très attaché à l'utilisation des caractères suivants os.path
et le recommander sur cette base.
(Cependant, le chemin de la vertu n'est pas le plus facile à emprunter, et beaucoup de gens, lorsqu'ils le découvrent, sont tentés de prendre un chemin glissant qui mène directement à la damnation. Elles ne s'en rendront compte que lorsqu'un jour tout s'écroulera, et qu'elles -- ou, plus probablement, quelqu'un d'autre -- devront comprendre pourquoi tout est allé de travers, et qu'il s'avérera que quelqu'un a créé un nom de fichier qui mélange des slashs et des backslashes -- et qu'une personne suggérera que la réponse est "ne pas faire ça". Ne soyez pas l'une de ces personnes. Sauf pour celui qui a mélangé les slashs et les backslashes -- vous pouvez être eux si vous voulez).
Vous pouvez obtenir le lecteur et le chemin+fichier comme ceci :
drive,path_and_file=os.path.splitdrive(path)
Obtenez le chemin et le fichier :
path,file=os.path.split(path_and_file)
Obtenir les noms des dossiers individuels n'est pas particulièrement pratique, mais c'est le genre d'inconfort moyennement honnête qui augmente le plaisir de trouver plus tard quelque chose qui fonctionne vraiment bien :
folders=[]
while 1:
path,folder=os.path.split(path)
if folder!="":
folders.append(folder)
else:
if path!="":
folders.append(path)
break
folders.reverse()
(Cela fait apparaître un "\"
au début de folders
si le chemin était initialement absolu. Vous pourriez perdre un peu de code si vous ne vouliez pas cela).
8 votes
En examinant ces réponses, rappelez-vous que
os.path.split
ne fonctionne pas pour vous parce que vous n'échappez pas cette chaîne correctement.0 votes
Vous devez échapper la chaîne ou utiliser rawstring :
r"d:\stuff\morestuff\furtherdown\THEFILE.txt"
pour éviter des choses comme\s
être mal interprétées.