首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Snakemake,任何用glob_wildcards跳过子目录的方法

Snakemake,任何用glob_wildcards跳过子目录的方法
EN

Stack Overflow用户
提问于 2020-03-18 06:41:41
回答 2查看 224关注 0票数 1

我是SnakeMake的新手。我试着用这个简单的Snakefile自学:

代码语言:javascript
复制
(IDS, ) = glob_wildcards( "{id}.txt" )
print ( str ( IDS ) )

rule all:
    input:
        expand ( "out/{id}-1.txt", id = IDS )

rule copy:
    input:
        "{id}.txt"
    output:
        "out/{id}-1.txt"
    shell:
        "cp {input} {output}"

我第一次运行它时(当out还不存在时),它运行得很好,并创建了三个in out副本。下一次,IDS包含'out/c-1', 'out/a-1', 'out/b-1',这当然不是我想要的,因为我希望glob_wildcards只扫描第一级。有没有办法做到这一点,也许是使用函数接收的regex参数?

到目前为止,在IDS创建之后,我只通过一个过滤器来管理它:

代码语言:javascript
复制
IDS = [ id for id in IDS if '/' not in id ]

但我希望是更紧凑的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-18 14:30:31

从我在glob_wildcards实现中看到的情况来看,这个函数没有任何限制级别的参数。这意味着您的解决方案(一行代码)可能是最紧凑的解决方案,以防您确实需要输出文件夹作为输入的嵌套文件夹。

简单的解决方案是将输入和输出分离到同级文件夹中。在这种情况下,下面的代码将在一个干净的输入文件夹中进行搜索,该文件夹从未被输出污染:

代码语言:javascript
复制
(IDS, ) = glob_wildcards( "path_to_input/{id}.txt" )
票数 1
EN

Stack Overflow用户

发布于 2020-03-19 00:51:23

我同意单独的目录是解决这个问题的最简单的方法。您还可以使用wildcard constraints告诉snakemake您的ids不包含'/'

代码语言:javascript
复制
(IDS, ) = glob_wildcards("{id,[^/]+}.txt")
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60731232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档