让 Snakemake 很好地处理基于日期时间的文件名

Getting Snakemake to work nicely with datetime-based filenames

我正在处理一个大型数据集,其中每个文件(在线存储)都有一个 URL 看起来像

import datetime

def fname(dt: datetime.datetime):
    return "dataset-" + dt.strftime("%Y%m%d-%H%M%S") + ".gz"

def url(dt: datetime.datetime):
    return "url.com/" + fname(dt)

在我的 Snakefile 中,我有一个要使用的日期时间列表。对于每一个,我都需要从互联网上下载相应的文件(使用 wget 或类似的)。

rule download:
    output: # would like to specify `fname(dt)`
    shell: # would like to `wget -O url(dt)`

做这样的事情的正确方法是什么?

我认为最直接的方法是创建一个元数据 table,每一行代表文件名和下载 URL,并使用它来查询 URL 中的下载 URL =12=]根据文件名

或者您可以指定rule all中的所有文件:

rule all:
    input:
        [fname(dt) for dt in dts]

然后rule download:

rule download:
    output: "{file}"
    shell: "wget -O url.com/{output}"