首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >循环遍历目录名list.remove()不起作用

循环遍历目录名list.remove()不起作用
EN

Stack Overflow用户
提问于 2013-05-23 21:18:03
回答 1查看 543关注 0票数 0

我正在尝试遍历多个目录和多个GDB,以创建一个要素类列表。我遇到的问题是,当我试图从列表中删除某些要素类时,脚本只是被忽略了,或者我得到了一个错误,说明列表中不存在x。(X)。要素类名称的问题是,它有3个字母,对于每个GDB是唯一的,同时仍然有2个其他标准组件。

如下所示:

directory1 > directory1.gdb > shapes > fc_dir1_feature

&

directory2 > directory2.gdb > shapes > fc_dir2_feature

以此类推。

我正在使用

代码语言:javascript
运行
复制
for dirpath, dirnames, filenames in arcpy.da.Walk(in_workspace, datatype="FeatureClass",type="Polygon"):
if "dir1" in dirnames:
    dirnames.remove('dir1')

这可以很好地从GDB中删除要素数据集,并扩展到其中的所有要素类。但我不能仅删除特定的要素类。

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2013-05-24 00:06:27

假设arcpy.da.Walk的工作方式与os.walk类似(也就是说,从dirname中删除目录会停止遍历该目录),您应该添加另一个for循环来迭代dirname并应用您的过滤器。请注意,我复制了dirname,这样我就可以调用remove,而不会搞乱迭代器。

代码语言:javascript
运行
复制
for dirpath, dirnames, filenames in arcpy.da.Walk(in_workspace, datatype="FeatureClass",type="Polygon"):
    # remove subdirectories that match pattern so they will not be walked
    for dirname in dirnames[:]:
        if 'dir1' in dirname:
            dirnames.remove(dirname)

借鉴ArcGIS Resources,您可以使用正则表达式以几种不同的方式过滤文件名。以下是删除通配符插槽中包含'abc‘、'def’或'ghi‘的文件的正则表达式示例:

代码语言:javascript
运行
复制
import arcpy
import os
import re

workspace = "c:/data"
feature_classes = []

# i dont like abc, def or ghi features so I have a regex to match them
filter_classes_re = re.compile('fc_(abc|def|ghi)_feature$')

for dirpath, dirnames, filenames in arcpy.da.Walk(workspace,
                                                  datatype="FeatureClass",
                                                  type="Polygon"):
    for filename in filenames:
        # only add to feature list if it doesn't match the bad guys
        if filter_classes_re.match(filename) is None:
            feature_classes.append(os.path.join(dirpath, filename))


# alternately, i could extract the wildcard part and compare it outside
# of the regex ... but this will be slower

filter_classes_re = re.compile('fc_(.*?)_feature$')

for dirpath, dirnames, filenames in arcpy.da.Walk(workspace,
                                                  datatype="FeatureClass",
                                                  type="Polygon"):
    for filename in filenames:
        # extract the wildcard part
        match = filter_classes_re.match(filename)
        if match:
            matched = match.group(1)
        else:
            matched = ''
        if matched not in ('abc', 'def', 'ghi'):
            feature_classes.append(os.path.join(dirpath, filename))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16714991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档