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]
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")]
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))
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']