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
。