我是蛇制作的新手,我不知道如何解决这个问题。
我的规则有两个输入:
rule test
input_file1=f1
input_file2=f2
f1在[A {1} $,A {2}£,B {1}€,B {2}¥中]
f2位于[C {1},C {2}]
数字是来自扩展调用的通配符。我需要找到一种将与数字完全匹配的文件传递给文件f1和f2的方法。例如:
f1 = A1
f2 = C1
或
f1 = B1
f2 = C1
我必须避免组合,例如:
f1 = A1
f2 = C2
我将创建一个在文件之间进行这种匹配的函数,但是相同的函数应同时管理input_file1和input_file2。我曾想过要创建一个可以使用允许的不同组合创建字典的函数,但是在扩展过程中如何在其上“迭代”呢?
谢谢
假设规则test
在输出中提供一个名为{f1}.{f2}.txt
的文件,那么您需要某种机制来正确地将f1和f2配对并创建{f1}.{f2}.txt
文件的列表。
如何创建此列表取决于您,expand
只是为此提供的便利功能,但在这种情况下,您可能希望避免使用它。
这是一个非常简单的示例:
fin1 = ['A1$', 'A2£', 'B1€', 'B2¥']
fin2 = ['C1', 'C2']
outfiles = []
for x in fin1:
for y in fin2:
## Here you pair f1 and f2. This is a very trivial way of doing it:
if y[1] in x:
outfiles.append('%s.%s.txt' % (x, y))
wildcard_constraints:
f1 = '|'.join([re.escape(x) for x in fin1]),
f2 = '|'.join([re.escape(x) for x in fin2]),
rule all:
input:
outfiles,
rule test:
input:
input_f1 = '{f1}.txt',
input_f2 = '{f2}.txt',
output:
'{f1}.{f2}.txt',
shell:
r"""
cat {input} > {output}
"""
如果用touch 'A1$.txt' 'A2£.txt' 'B1€.txt' 'B2¥.txt' 'C1.txt' 'C2.txt'
触摸开始的输入文件,则应该可以运行此示例。