Подтвердить что ты не робот

Нужен путь для определенных файлов с помощью os.walk()

Я пытаюсь выполнить некоторую геообработку. Моя задача - найти все шейп файлы в каталоге, а затем найти полное имя пути для этого файла формы в каталоге. Я могу получить имя шейп файла, но я не знаю, как получить полное имя пути для этого шейп файла.

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

Ответ 1

os.walk дает вам путь к каталогу в качестве первого значения в цикле, просто используйте os.path.join() для создания полного имени файла:

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

Я переименовал path в цикле на dirpath, чтобы не конфликтовать с переменной path, которую вы уже проходили до os.walk().

Обратите внимание, что вам не нужно проверять результат .endswith() == True; if уже делает это для вас, часть == True полностью избыточна.

Вы можете использовать .extend() и выражение генератора, чтобы сделать приведенный выше код немного более компактным:

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

или даже как одно понимание списка:

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

Ответ 2

Кажется, что os.path.abspath(finename) будет работать. Попробуйте.

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))

Ответ 3

Почему бы не import glob?

import glob 

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

и я получаю все jpeg, которые я хочу, с абсолютным путем

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