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

2024-05-23 18:51:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我在试着做一些地理处理。我的任务是在目录中找到所有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]

Tags: pathin目录名称forifosfiles
3条回答

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

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

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,以与您已经传递给os.walk()path变量不冲突。

请注意,不需要测试.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")]

相关问题 更多 >