Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Snakemake:仅扩展通配符的子集_Python_Bioinformatics_Snakemake - Fatal编程技术网

Python Snakemake:仅扩展通配符的子集

Python Snakemake:仅扩展通配符的子集,python,bioinformatics,snakemake,Python,Bioinformatics,Snakemake,我找不到解决这个可能很容易的问题的方法: 我有一个snakefile,它首先生成以下文件: 数据/样本1_P1.txt 数据/样本1_P2.txt 数据/样本2_P1.txt 数据/样本2_P2.txt 在下一步中,它只是将文件连接到一个文件concatenated/concatenated.txt 这是最小的、可重复的示例: pairs = {"P1" : "P1", "P2" : "P2"} samples = { "sample1": "sample1", "samp

我找不到解决这个可能很容易的问题的方法:

我有一个snakefile,它首先生成以下文件:

  • 数据/样本1_P1.txt

  • 数据/样本1_P2.txt

  • 数据/样本2_P1.txt

  • 数据/样本2_P2.txt

在下一步中,它只是将文件连接到一个文件
concatenated/concatenated.txt

这是最小的、可重复的示例:

pairs = {"P1" : "P1", "P2" : "P2"}

samples = {
    "sample1": "sample1",
    "sample2": "sample2"
}

rule all:
    input: "concatenated/concatenated.txt"

rule get_txt_files:
    output:
        "data/{sample}_{pair}.txt"
    shell:
        """
        echo 1 > {output}
        """

rule concatenate:
  input:
    expand("data/{sample}_{pair}.txt", sample=samples, \
        pair=pairs)
  output:
    "concatenated/concatenated.txt"
  shell:
    "cat {input} > {output};"

我的问题很简单:如何修改规则
连接
,使其连接具有相同示例名称的文件

预期的产出将是:

  • 串联/sample1.txt

  • 串联/sample2.txt

任何帮助都将不胜感激

编辑

我有一个非常类似的后续问题,因此我认为没有必要再次提出一个新问题:

如果我的预期输出如下:

  • 数据/样本1/样本1\u P1

  • 数据/样本1/样本1\u P2

  • 数据/样本2/样本2_P1

  • 数据/样本2/样本2\u P2

明确地说:我只想创建一个新的目录并将文件移动到定制的目录中

这样做似乎很直观:

pairs = {"P1" : "P1", "P2" : "P2"}

samples = {
    "sample1": "sample1",
    "sample2": "sample2"
}

rule all:
    input: expand("data/{sample}/{sample}_{pair}.txt", sample=samples, pair = pairs)

rule get_txt_files:
    output:
        "data/{sample}_{pair}.txt"
    shell:
        """
        echo 1 > {output}
        """

rule reorganise:
  input:
    expand("data/{{sample}}_{pair}.txt", \
        pair=pairs)
  output:
    "data/{sample}/{sample}_{pair}.txt"
  shell:
    "mv {input} data/{wildcards.sample}/.;"

你能发现问题吗

提前多谢

rule concatenate:
  input:
    expand("data/{{sample}}_{pair}.txt", pair=pairs)
  output:
    "concatenated/{sample}.txt"
  shell:
    "cat {input} > {output};"
在评论中回答问题:

from snakemake.io import expand # automatically imported in Snakemake 

expand("data/{{sample}}_{pair}.txt", pair="A B C".split())
# ['data/{sample}_A.txt', 'data/{sample}_B.txt', 'data/{sample}_C.txt']

rule all:input:expand(“concatenated/{sample}.txt”,sample=samples)
谢谢。我没有意识到
{{}}
符号。它是否基本上具有在直接环境中不解析的功能(即此处的扩展功能)?没问题;它是常规Python,用于避免格式化:
“{hi}}}{u{hi}.format(hi=“hei”)
变为“{hi}uhei”。我再次更新了我的问题。我对snakemake如何使用通配符有点困惑。我将非常感谢您在第二个问题上的帮助。您必须描述您的问题:您得到了什么输出?你希望或期待什么?请创建一个新问题:)我已将问题发布在此处: