我有这段代码可以从目录中检查要存储哪些文件以供以后处理:
for i in glob(r'C:\Users\user\Desktop\fol' + '**/*/*/*', recursive=True):
if i.endswith('PAD.shp'):
print(i)
pad = gpd.read_file(i)
if i.endswith('DND.shp'):
print(i)
dnd = gpd.read_file(i)
只存储dnd
。尽管还有其余部分,但它不存储它。
为了让您了解发生了什么,请检查它打印它找到的内容的地方:
for i in glob(r'C:\Users\user\Desktop\fol' + '**/*/*/*', recursive=True):
if i.endswith('PAD.shp'):
print('PAD:'+i)
elif i.endswith('DND.shp'):
print('DND:'+i)
给出:
DND:C:\Users\user\Desktop\fol\43001\DND\DND.shp
PAD:C:\Users\user\Desktop\fol\43001\PAD\PAD.shp
DND:C:\Users\user\Desktop\fol\43003\DND\DND.shp
PAD:C:\Users\user\Desktop\fol\43003\PAD\PAD.shp
如何在每次迭代中从每个文件夹中获取文件 dnd
和 pad
?
我认为可能是错误的:
它搜索目录,并且由于它首先存储了 dnd
(正如它在打印所有内容的最后一段代码中所看到的那样),所以它继续进行而没有检查目录的其余部分。因此 pad
没有分配任何东西。
解决方案
一个解决方案可以是强制迭代从同一文件夹(例如文件夹 43001
)分配每个 dnd
和 pad
,然后继续计算,完成后再次使用正确对的下一个文件夹。
如何做到这一点?
最佳答案
我不知道你的代码中究竟发生了什么,但也许可以尝试以下代码来帮助调试
pads = {}
dnds = {}
for i in glob(r'C:\Users\user\Desktop\fol' + '**/*/*/*', recursive=True):
if i.endswith('PAD.shp'):
print("file:", i)
pads[i] = gpd.read_file(i)
print("len:", len(pads[i]))
elif i.endswith('DND.shp'):
print("file:", i)
dnds[i] = gpd.read_file(i)
print("len:", len(dnds[i]))
print("loaded pads:", pads.keys())
print("loaded dnds:", dnds.keys())
只是为了更密切地关注正在发生的事情并查看到底加载了什么/是否有任何错误
关于python - 带有 if 语句的 glob 来选择要将哪些文件存储到变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51763172/