У меня есть правило Snakamake, в котором мой шаблон содержит специальные символы, поэтому я избегаю их, используя sub, см. Ответ здесь . Выходной файл: 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' ('* 1010) *
Запуск модуля re работает нормально в Python:
filename = 'extract_AAV(1).csv'
print(re.sub(r'([()])', r'\\\1', filename)
# returns: extract_AAV\\(1\\).csv
Воспроизводимый пример ошибки при передаче символов подстановки со специальными символами из Snakemake в сценарий python выглядит следующим образом :
Файл Snakemake:
rule get_data:
output: "extract_{sample}.csv"
shell: "python run.py --fn {wildcards.sample}"
run.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--fn', type=str)
args = parser.parse_args()
import pandas as pd
df = pd.DataFrame({'a': [1,2,3]})
df.to_csv("extract_"+args.fn+'.csv')
команда для выполнения попытки 1:
$ snakemake extract_AAV(1).csv --cores 1
bash: syntax error near unexpected token `('
команда для выполнения попытки 2:
$ snakemake extract_AAV\(1\).csv --cores 1
Building DAG of jobs...
Using shell: /bin/bash
Provided cores: 1 (use --cores to define parallelism)
Rules claiming more threads will be scaled down.
Job counts:
count jobs
1 get_data
1
[Wed Apr 29 11:31:34 2020]
rule get_data:
output: extract_AAV(1).csv
jobid: 0
wildcards: sample=AAV(1)
/bin/bash: -c: line 0: syntax error near unexpected token `('
/bin/bash: -c: line 0: `set -euo pipefail; python run.py --fn AAV(1)'
[Wed Apr 29 11:31:34 2020]
Error in rule get_data:
jobid: 0
output: extract_AAV(1).csv
shell:
python run.py --fn AAV(1)
(one of the commands exited with non-zero exit code; note that snakemake uses bash strict mode!)
Shutting down, this might take some time.
Exiting because a job execution failed. Look above for error message
Complete log: /home/XXXXX/.snakemake/log/2020-04-29T113134.773987.snakemake.log