Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 需要使用os.walk()为特定文件提供路径_Python_Shapefile_Os.walk - Fatal编程技术网

Python 需要使用os.walk()为特定文件提供路径

Python 需要使用os.walk()为特定文件提供路径,python,shapefile,os.walk,Python,Shapefile,Os.walk,我正在尝试执行一些地理处理。我的任务是找到目录中的所有形状文件,然后在目录中找到该形状文件的完整路径名。我可以获取该形状文件的名称,但我不知道如何获取该形状文件的完整路径名 shpfiles = [] for path, subdirs, files in os.walk(path): for x in files: if x.endswith(".shp") == True: shpfiles.append[x] os.walk将目录路径作为循

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

shpfiles = []
for path, subdirs, files in os.walk(path):
    for x in files:
        if x.endswith(".shp") == True:
            shpfiles.append[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()==True的结果是否为
如果
已经为您执行了此操作,则
==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")]

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

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

不会的
abspath
将以当前工作目录的文件名为基础,该目录可以是完全不同的路径。
glob()
仅支持固定深度的子目录,
os.walk()
支持任意深度。请看原始问题可以解释为单个目录。对于那些不需要子目录的读者(比如我),glob更像pythonic,因为它更简洁,产生了一个更直接有用的结果。文件尾部可以大写,例如:
test.jpg
test.jpg
,如果x.endswith(“.jpg”):,则在语句中返回
False
。我们可以使用Python内置函数来防止可能出现的错误。使用
if x.lower().endswith(“.jpg”):
我们在比较之前降低字符串。因此,
test.jpg
test.jpg
将返回
True