使用os.walk()需要特定文件的路径

时间:2013-05-09 15:25:33

标签: python shapefile os.walk

我正在尝试执行一些地理处理。我的任务是在目录中找到所有shapefile,然后在目录中找到该shapefile的完整路径名。我可以获取shapefile的名称,但我不知道如何获取该shapefile的完整路径名。

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

3 个答案:

答案 0 :(得分:54)

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的{​​{1}}变量不冲突。

请注意,您无需测试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"))

答案 1 :(得分:0)

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

答案 2 :(得分:0)

为什么不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']