Snakemake特殊符号通配符

问题描述 投票:1回答:1

我具有如下的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
python python-3.x snakemake
1个回答
0
投票

要么我无法重现问题,要么您使事情变得比必要的复杂。这对我有用:

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位在这里不是必需的,但我倾向于相当自由地使用它)。

如果这没有帮助,您可以发表可复制的示例吗?

© www.soinside.com 2019 - 2024. All rights reserved.