在一条路径中,我有这样的文件:
check1
check1_f
check1_f_line
check2
check2_f
check2_f_line
..我想做一个for循环,它将在这些文件的函数组合中使用。
问题
我不知道如何使这些组合,对每一个“检查”,它将采取正确的组合。
如果不是用于循环的函数,则如下所示:
erase('check1','check1_f_line','output_name')我试过的是:
for i, j in path:
if 'f' not in i and 'line' in j:
erase(i, j, i + '_output') 更新
我查过这份清单,它有一些问题:
li=['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']然后是这个:
a=[li[i:i+3] for i in range(0, len(li), 3)]返回的地方:
[['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']]最后:
for base, base_f, base_line in a:
print(base, base_line, base + "_output")给予:
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上面的组合是正确的,而另一个则不正确。有什么想法吗?
新的
例如:
base = [f for f in li if not f.endswith(("_polyg", "_to_line"))]
base_f = {f.strip("_polyg"): f for f in li if f.endswith("_polyg")}
base_line = {f.strip("_to_line"): f for f in li if f.endswith("_to_line")}
[(b, base_f[b], base_line[b]) for b in base]给予:
KeyError: 'check3_dwg_Polyline'发布于 2018-07-25 13:49:11
假设path是文件名的列表,假设这个列表中除了这些文件之外没有其他文件,并且假设文件名是按名称排序的(如果它们不是,只需对它们排序),您就可以将列表细分为三个块。
>>> [path[i:i+3] for i in range(0, len(path), 3)]
[['check1', 'check1_f', 'check1_f_line'],
['check2', 'check2_f', 'check2_f_line']]或者,您可以获得“基本”文件(没有后缀),然后得到相应的后缀文件,然后相应地对它们进行配对。如果某些后缀文件可能不存在,也可以使用base_f.get(b)而不是base_f[b],那么这些元素将是None,而不是引发异常。
>>> base = [f for f in path if not f.endswith(("_f", "_f_line"))]
>>> base_f = {f.strip("_f"): f for f in path if f.endswith("_f")}
>>> base_line = {f.strip("_f_line"): f for f in path if f.endswith("_f_line")}
>>> [(b, base_f[b], base_line[b]) for b in base]
[('check1', 'check1_f', 'check1_f_line'),
('check2', 'check2_f', 'check2_f_line')]您的问题的这一部分并不完全清楚,但是您可以迭代生成的两个三胞胎列表中的任何一个,并相应地调用erase:
for base, base_f, base_line in triples:
erase(base, base_line, base + "_output")https://stackoverflow.com/questions/51520114
复制相似问题