python - 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
如何从每个文件夹中获取两个文件dnd
和pad
每次迭代?
我认为可能是错的:
它搜索目录,并且由于它首先存储dnd
(从它打印所有内容的最后一段代码中可以看出)它继续进行而不检查目录的其余部分。因此,pad
没有分配任何东西。
解决方案
一种解决方案可以是强制迭代从同一个文件夹(例如 folder )分配每个dnd
,然后进行计算,完成后再次使用正确对的下一个文件夹。pad
43001
如何做到这一点?
解决方案
我不确切知道您的代码中会发生什么,但也许可以尝试以下代码来帮助调试
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())
只是为了更密切地关注正在发生的事情,看看到底加载了什么/是否有任何错误
推荐阅读
- sql - 在 AWS CLI 中启动 Athena 查询执行失败,但在 AWS 管理控制台中成功
- sql - 为公司主管创建 sql 查询
- python - 如何专注于难以预测的标签?
- imagemagick - 在不使用“使用画板”的情况下将 AI 转换为 EPS / JPEG
- php - 如何通过错误“infiniteScroll 不是函数”?
- typescript - TypeScript:如何在带有剩余参数的函数中返回条件类型?
- python - 如何从@app.task 中获取 celery.Task 对象
- javascript - 刷新页面而不不断刷新
- angular - 使用 NzPicker (nz-year-picker) 的 NzNoAnimation 错误
- python - 如何生成所有可能的二进制 nxm 矩阵,其中每行之和为 1