python - 让 Snakemake 与基于日期时间的文件名很好地配合使用

我正在使用一个大型数据集,其中每个文件(在线存储)都有一个类似于

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)`

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

回答1

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

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

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

然后 rule download

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