web-dev-qa-db-fra.com

Besoin du chemin pour des fichiers particuliers en utilisant os.walk ()

J'essaie de faire du géotraitement. Ma tâche consiste à localiser tous les fichiers de formes d'un répertoire, puis à trouver le nom de chemin complet de ce fichier de formes dans le répertoire. Je peux obtenir le nom du fichier de formes, mais je ne sais pas comment obtenir le nom de chemin complet de ce fichier.

shpfiles = []
for path, subdirs, files in os.walk(path):
    for x in files:
        if x.endswith(".shp") == True:
            shpfiles.append[x]
17
Schack

os.walk vous donne le chemin du répertoire comme première valeur de la boucle, utilisez simplement os.path.join() pour créer le nom de fichier complet:

shpfiles = []
for dirpath, subdirs, files in os.walk(path):
    for x in files:
        if x.endswith(".shp"):
            shpfiles.append(os.path.join(dirpath, x))

J'ai renommé path dans la boucle en dirpath pour ne pas entrer en conflit avec la variable path que vous aviez déjà passée à os.walk().

Notez que vous n'avez pas besoin de tester si le résultat de .endswith() == True; if le fait déjà pour vous, la partie == True est entièrement redondante.

Vous pouvez utiliser .extend() et une expression génératrice pour rendre le code ci-dessus un peu plus compact:

shpfiles = []
for dirpath, subdirs, files in os.walk(path):
    shpfiles.extend(os.path.join(dirpath, x) for x in files if x.endswith(".shp"))

ou même comme une compréhension de liste:

shpfiles = [os.path.join(d, x)
            for d, dirs, files in os.walk(path)
            for x in files if x.endswith(".shp")]
49
Martijn Pieters

Il semble que os.path.abspath(finename) fonctionnera. S'il vous plaît essayez.

shpfiles = []
for path, subdirs, files in os.walk(path):
    for x in files:
        if x.endswith(".shp") == True:
            shpfiles.append(os.path.join(path, x))
0
gsmaker

Pourquoi pas import glob?

import glob 

print(glob.glob('F:\OTHERS\PHOTOS\Panama\\mai13*\\*.jpg') )

et je reçois tout le jpeg que je veux, avec un chemin absolu

>>> 
['F:\\OTHERS\\PHOTOS\\Panama\\mai13\\03052013271.jpg', 
'F:\\OTHERS\\PHOTOS\\Panama\\mai13\\05052013272.jpg', 
'F:\\OTHERS\\PHOTOS\\Panama\\mai13\\05052013273.jpg']
0
octoback