例如,我有以下通配符。
dataset = ['A1', 'A2', 'A3', 'B1', 'B2', 'B3']
group = ['A', 'B']
我正试图将我的数据集与我的小组禁止使用。例如,我要创建
A1 / file.A.txt A2 / file.A.txt A3 / file.A.txt B1 / file.B.txt ...
我写了一条下面的规则,希望可以实现
rule complex_conversion:
input:
"{dataset}/inputfile"
output:
"{dataset}/file.{group}.txt"
wildcard_constraints:
dataset = {group} + '\d+'
#dataset = {wildcards.group} + '\d+'
shell:
"somecommand --group {wildcards.group} < {input} > {output}"
糟糕,我收到了错误
TypeError:unhashable type: 'list'
#NameError: name 'wildcards' is not defined
似乎{group}被视为传递关键字wildcard_constraints的列表。
是否有任何方法可以在wildcards_constrain中使用通配符,也可以使用其他方法将数据集映射到组。
答案 0 :(得分:1)
这不能回答您的问题,但可能会有所帮助...如果您的输出文件列表是dataset
和group
的组合,我将首先创建该列表,然后将其用作输出文件列表:
dataset = ['A1', 'A2', 'A3', 'B1', 'B2', 'B3']
group = ['A', 'B']
# Use a for-loop or whatever to create this list:
datagrp = ['A1/file.A.txt','A2/file.A.txt', 'A3/file.A.txt', 'B1/file.B.txt']
wildcard_constraints:
# This prevents wildcards to be interpreted as regexes
dataset = '|'.join([x for x in dataset]),
group = '|'.join([x for x in group])
rule all:
input:
datagrp,
rule complex_conversion:
input:
"{dataset}/inputfile"
output:
"{dataset}/file.{group}.txt"
shell:
"somecommand --group {wildcards.group} < {input} > {output}"