41

我正在尝试执行一些地理处理。我的任务是在一个目录中找到所有 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]
4

3 回答 3

97

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() == Trueif已经为您做到了,这== 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")]
于 2013-05-09T15:27:48.090 回答
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))
于 2013-05-09T15:31:40.967 回答
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']
于 2013-05-09T15:36:17.370 回答