我想做一个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]))
答案 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.Shp
或yy.SHP
这样的文件名),那么简单的str.endswith
是还不够,您应该使用fnmatch
或至少使用不区分大小写的正则表达式(感谢Peter Wood的发言)。