首页 > 解决方案 > glob 与 if 语句来选择哪些文件存储到一个变量?

问题描述

我有这段代码可以从目录中检查要存储哪些文件以供以后处理:

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

如何从每个文件夹中获取两个文件dndpad每次迭代?

我认为可能是错的:

它搜索目录,并且由于它首先存储dnd(从它打印所有内容的最后一段代码中可以看出)它继续进行而不检查目录的其余部分。因此,pad没有分配任何东西。

解决方案

一种解决方案可以是强制迭代从同一个文件夹(例如 folder )分配每个dnd,然后进行计算,完成后再次使用正确对的下一个文件夹。pad43001

如何做到这一点?

标签: pythonfor-loopglob

解决方案


我不确切知道您的代码中会发生什么,但也许可以尝试以下代码来帮助调试

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())

只是为了更密切地关注正在发生的事情,看看到底加载了什么/是否有任何错误


推荐阅读