我在写一条蛇制作规则来更改我的样本名称时遇到了一些麻烦.在使用Porechop解复用并使用FiltLong进行一些基本修剪之后,我想将我的样本的名称从例如BC01_trimmed.fast q.gz更改为E_coli_trimmed.fast q.gz.我的 idea 是,在我的配置文件中有一个字典,其中每个样本都链接到使用过的条形码.

基于前面提出的this个问题,我编写了这段示例代码.

mydictionary = {
    'BC01': 'bacteria_A',
    'BC02': 'bacteria_B'
}

rule all:
    input:
        expand('{bacteria}_trimmed.fastq.gz', bacteria=mydictionary.values())

rule changeName:
    input:
        '{barcode}_trimmed.fastq.gz'
    params:
        value=lambda wcs: mydictionary[wcs.bacteria]
    output:
        '{params.value}_trimmed.fastq.gz'
    shell:
        "mv {input} {output}"

但我收到了错误:

WildcardError in rule changeName in file Snakefile:
Wildcards in input files cannot be determined from output files:
'barcode'

提前谢谢你

推荐答案

我们再试一次...我将颠倒字典,因为在您的输入函数中,您希望检索给定示例名称的条形码.(当然,您可以使用python代码来反转键值).

要解决循环依赖或类似的错误,我认为您需要将通配符值约束为您的字典中的值,即您需要有效地禁用正则表达式匹配,或者您可以将重命名的文件输出到不同的目录.(我真的很喜欢Snakemake,但我觉得这种行为很令人困惑).为了避免这个问题,我对任何通配符都很随意地使用了下面的wildcard_constraints模式.所以:

mydictionary = {
    'bacteria_A': 'BC01',
    'bacteria_B': 'BC02' 
}

wildcard_constraints:
    bacteria='|'.join([re.escape(x) for x in mydictionary.keys()]),

rule all:
    input:
        expand('{bacteria}_trimmed.fastq.gz', bacteria=mydictionary.keys())

rule changeName:
    input:
        lambda wcs: '%s_trimmed.fastq.gz' % mydictionary[wcs.bacteria],
    output:
        '{bacteria}_trimmed.fastq.gz'
    shell:
        "mv {input} {output}"

Python相关问答推荐

错误:找不到TensorFlow / Cygwin的匹配分布

aiohTTP与pytest的奇怪行为

如何从同一类的多个元素中抓取数据?

如何将自动创建的代码转换为类而不是字符串?

如何获取Django REST框架中序列化器内部的外卡属性?

如何处理必须存在于环境中但无法安装的Python项目依赖项?

Matplotlib轮廓线值似乎不对劲

如何使用SubProcess/Shell从Python脚本中调用具有几个带有html标签的参数的Perl脚本?

如何根据日期和时间将状态更新为已过期或活动?

Python会扔掉未使用的表情吗?

TARete错误:类型对象任务没有属性模型'

将jit与numpy linSpace函数一起使用时出错

在Python中处理大量CSV文件中的数据

如何制作10,000年及以后的日期时间对象?

如何让程序打印新段落上的每一行?

pandas:排序多级列

如何在图中标记平均点?

为什么Django管理页面和我的页面的其他CSS文件和图片都找不到?'

在Python 3中,如何让客户端打开一个套接字到服务器,发送一行JSON编码的数据,读回一行JSON编码的数据,然后继续?

python—telegraph—bot send_voice发送空文件