首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按模式从列表中获取特定文件

按模式从列表中获取特定文件
EN

Stack Overflow用户
提问于 2018-07-26 07:22:16
回答 1查看 62关注 0票数 0

我有这份名单。我想做一个for循环,它将在列表中的这些文件的函数组合中使用。

我不知道如何使这些组合,对每一个“检查”,它将采取正确的组合。

如果不是用于循环的函数,则如下所示:

代码语言:javascript
复制
erase('check3_dwg_Polyline','check3_dwg_Polyline_feat_to_polyg_feat_to_line','output_name')

我试过的是:

这是名单。

代码语言:javascript
复制
li=['check3_dwg_Polyline', 'check2_dwg_Polyline', 
'check3_dwg_Polyline_feat_to_polyg',# this will not be needed to extracted
'check2_dwg_Polyline_feat_to_polyg',# >> >>
'check3_dwg_Polyline_feat_to_polyg_feat_to_line', 
 'check2_dwg_Polyline_feat_to_polyg_feat_to_line']

从以下几点开始:

代码语言:javascript
复制
a=[li[i:i+3] for i in range(0, len(li), 3)]

返回的地方:

代码语言:javascript
复制
[['check3_dwg_Polyline',
  'check2_dwg_Polyline',
  'check3_dwg_Polyline_feat_to_polyg'],
 ['check2_dwg_Polyline_feat_to_polyg',
  'check3_dwg_Polyline_feat_to_polyg_feat_to_line',
  'check2_dwg_Polyline_feat_to_polyg_feat_to_line']]

最后:

代码语言:javascript
复制
for base, base_f, base_line in a:
    print(base, base_line, base + "_output")

给予:

代码语言:javascript
复制
check3_dwg_Polyline  check3_dwg_Polyline_feat_to_polyg  check3_dwg_Polyline_output
check2_dwg_Polyline_feat_to_polyg  check2_dwg_Polyline_feat_to_polyg_feat_to_line  check2_dwg_Polyline_feat_to_polyg_output

其他方法:

代码语言:javascript
复制
base = [f for f in li if not f.endswith(("_polyg", "_to_line"))]
base_f = {f.strip("_feat_to_polyg"): f for f in li if f.endswith("_polyg")}
base_line = {f.strip("_feat_to_polyg_feat_to_line"): f for f in li if f.endswith("_to_line")}
[(b, base_f[b], base_line[b]) for b in base]

给予:

代码语言:javascript
复制
KeyError: 'check3_dwg_Polyline'

我尝试过对列表进行排序,但是当通过上面提到的过程时,它只是以一种不同的方式破坏了它。

理想的结果是

当尝试这样做时:

代码语言:javascript
复制
for base, base_f, base_line in a:
    print(base, base_line, base + "_output")

为了做到这一点:

代码语言:javascript
复制
check3_dwg_Polyline   check3_dwg_Polyline_feat_to_polyg_feat_to_line  check3_dwg_Polyline_output

check2_dwg_Polyline   check2_dwg_Polyline_feat_to_polyg_feat_to_line  check2_dwg_Polyline_output

像这样放进去的地方:

代码语言:javascript
复制
erase('check3_dwg_Polyline','check3_dwg_Polyline_feat_to_polyg_feat_to_line','output_name')
EN

回答 1

Stack Overflow用户

发布于 2018-07-26 09:24:05

将列表划分为zip 2…中的check3块然后您可以执行for循环。

代码语言:javascript
复制
n = len(li) // 3
a = zip(*[li[i:i+n] for i in range(0, len(li), n)])

(pprint(list(a))将输出

代码语言:javascript
复制
[('check3_dwg_Polyline',
  'check3_dwg_Polyline_feat_to_polyg',
  'check3_dwg_Polyline_feat_to_polyg_feat_to_line'),
 ('check2_dwg_Polyline',
  'check2_dwg_Polyline_feat_to_polyg',
  'check2_dwg_Polyline_feat_to_polyg_feat_to_line')]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51533163

复制
相关文章

相似问题

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