os.path.join, но извлечь элемент списка - PullRequest
0 голосов
/ 19 ноября 2018

Я хочу создать файл os.path.join, содержащий список в filenames, потому что в этой последней папке 3 файла.Я хочу использовать только PST.shp

import os
fo = []
f = r'C:\Users\user\Desktop\folder\folder1'
for dirpath,dirnames,filenames in os.walk(f):      
        print(filenames)
        #fo.append(os.path.join(dirpath,filenames))

:

[]
[]
['PST.dbf', 'PST.shp', 'PST.shx']
[]
['PST.dbf', 'PST.shp', 'PST.shx']
[]
['PST.dbf', 'PST.shp', 'PST.shx']
[]
['PST.dbf', 'PST.shp', 'PST.shx']
[]

Как фильтровать, чтобы я использовал только полный путь PST.shp в списке fo?

что-то вроде:

 fo = []
    f = r'C:\Users\user\Desktop\folder\folder1'
    for dirpath,dirnames,filenames in os.walk(f):  
         if filenames not empty:    
            print(filenames)
            fo.append(os.path.join(dirpath,filenames[0][1]))

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Если вы уверены, что будете использовать сценарий только для обработки формы PST, просто следуйте советам @ AbdulNiyasPM, проверьте и обработайте файл PST.shp:

     ...
     if filenames not empty:    
        print(filenames)
        if 'PST.shp' in filenames:
            fo.append(os.path.join(dirpath, 'PST.shp'))

Если вы хотите сохранить любой файл shp, вы можете просто протестировать этот шаблон:

     ...
     if filenames not empty:    
        print(filenames)
        for name in filenames:
            if name.endswith('.shp'):
                fo.append(os.path.join(dirpath, name))

Осторожно: если вам нужна поддержка не чувствительных к регистру платформ, таких как Windows (то есть: если вы хотите принимать имена файлов, такие как xx.Shp или yy.SHP), простого str.endswith недостаточно, и вам следует используйте fnmatch или хотя бы регулярное выражение без учета регистра (спасибо Питеру Вуду за замечание).

0 голосов
/ 19 ноября 2018

Используйте функцию endswith для проверки расширения следующим образом:

for dirpath,dirnames,filenames in os.walk(f):  
   for f in filenames:
       if f.endswith('.shp'):
          fo.append(os.path.join(dirpath,f))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...