os.path.join但提取列表项

时间:2018-11-19 07:24:43

标签: python loops

我想做一个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 :(得分:0)

使用endswith函数按如下所示检查扩展,

for dirpath,dirnames,filenames in os.walk(f):  
   for f in filenames:
       if f.endswith('.shp'):
          fo.append(os.path.join(dirpath,f))

答案 1 :(得分:0)

如果您确定只使用脚本来处理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.Shpyy.SHP这样的文件名),那么简单的str.endswith是还不够,您应该使用fnmatch或至少使用不区分大小写的正则表达式(感谢Peter Wood的发言)。