glob with if语句选择要存储到变量的文件?

2024-06-01 07:03:04 发布

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

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

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没有任何赋值。你知道吗

解决方案

一个解决方案是强制迭代从同一个文件夹(例如文件夹43001)中分配每个dndpad,然后继续计算,完成后再使用下一个文件夹和正确的对。你知道吗

如何做到这一点?你知道吗


Tags: 代码目录文件夹ifusersprintdesktoppad
1条回答
网友
1楼 · 发布于 2024-06-01 07:03:04

我不知道你的代码中到底发生了什么,但也许可以尝试下面的代码来帮助调试

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

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

相关问题 更多 >