我具有如下的Snakamake规则,其中我的通配符包含特殊字符,因此我使用sub对其进行转义,请参见答案here。输出文件:data/extract_AAV(1).csv
。
import re
rule get_data:
input:
output: "data/extract_{re.sub(r'([()])', r'\\\1', filename)}.csv"
shell: "python get_data.py --filename {re.sub(r'([()])', r'\\\1', wildcards.filename)}"
但是,出现如下错误:
模块're'没有属性'sub(r'('
运行re模块在Python中工作正常:
filename = 'extract_AAV(1).csv'
print(re.sub(r'([()])', r'\\\1', filename)
# returns: extract_AAV\\(1\\).csv
要么我无法重现问题,要么您使事情变得比必要的复杂。这对我有用:
samples = ['AAV(1)', 'AAV(2)']
rule all:
input:
expand('data/extract_{sample}.csv', sample= samples),
wildcard_constraints:
sample= '|'.join([re.escape(x) for x in samples]),
rule one:
output:
'data/extract_{sample}.csv'
shell:
r"""
touch '{output}'
"""
((wildcard_constraints
位在这里不是必需的,但我倾向于相当自由地使用它)。
如果这没有帮助,您可以发表可复制的示例吗?