如何在关键字wildcard_constraints中使用通配符



例如,我有以下通配符。

dataset = ['A1', 'A2', 'A3', 'B1', 'B2', 'B3']
group = ['A', 'B']

我试图将我的数据集与我的小组相提并论。 例如,我想创建

A1/文件。A.txt A2/文件。A.txt A3/文件。A.txt B1/文件。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中使用通配符或替代方法将数据集映射到组。

这不能回答你的问题,但也许它有帮助......如果您的输出文件列表是datasetgroup的组合,我会先创建该列表,然后将其用作输出文件列表:

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}"

相关内容

  • 没有找到相关文章

最新更新