python - 带有 if 语句的 glob 来选择要将哪些文件存储到变量?

标签 python for-loop glob

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

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,然后继续计算,完成后再次使用正确对的下一个文件夹。

如何做到这一点?

最佳答案

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

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/

相关文章:

python - 如何使用另一个脚本删除代码中的尾随空格?

python - 配置解析 Robotframework

python - 有时忽略 pylint(import-error) 是最好的解决方案?

Python - for循环退出 'prematurely'

c - 检查每个元素在数组中出现次数的函数

python - glob 文件用作 python 脚本中 python 脚本的输入。

python - 如何编辑 pandas 数据框中列的所有值?

java - 仅对二维数组的行求和并将总和放入新数组中

python - 循环遍历文件并单独保存

java - 命令行参数中 * 的问题