【问题标题】:How to load files in a notebook when using Snakemake?使用 Snakemake 时如何在笔记本中加载文件?
【发布时间】:2022-06-23 23:55:31
【问题描述】:

在一个有几个步骤的数据处理项目中,使用Snakemake,在处理一些数据的子目录中有一个Python Jupyter Notebook:

笔记本processing_step_1/process.ipynb 包含:

with open('input.csv') as infile:
    for line in infile:
        print(line)

数据文件processing_step_1/input.csv包含:

one,two,three
1,2,3

这是使用notebookSnakefile

rule process_data:
    input:
        "processing_step_1/input.csv",
    notebook:
        "processing_step_1/process.ipynb"

如果我以交互方式运行笔记本,或者像这样从命令行运行

jupyter nbconvert --execute --to notebook processing_step_1/process.ipynb

它有效。工作目录设置为 notebook 的目录,输入文件可以通过相对路径找到。

但是,当从 Snakemake 运行时,使用

snakemake -c1

我收到一条错误消息

FileNotFoundError: [Errno 2] No such file or directory: 'input.csv'

其中的原因是notebook被复制并在不同的目录中执行,从Snakemake的错误信息可以看出:

Command 'set -euo pipefail;  jupyter-nbconvert --log-level ERROR --execute  --to notebook --ExecutePreprocessor.timeout=-1 /path/to/project/.snakemake/scripts/tmp9mmr8k20.process.ipynb' returned non-zero exit status 1.

在使用 Snakemake 时,从与 notebook 相同的目录加载数据文件的规范方法是什么?

我希望在没有 Snakemake 的情况下仍然能够独立使用同一个笔记本。所以最好我不想向它添加特定于 Snakemake 的代码。

似乎无法从笔记本中找到包含该笔记本的目录。参见例如https://stackoverflow.com/a/52119628/381281。我也找不到在 Snakemake 中为每个规则设置工作目录的方法。

【问题讨论】:

    标签: python jupyter-notebook relative-path snakemake


    【解决方案1】:

    使用shell,可以cd到所需的工作目录:

    rule process_data:
        input:
            "processing_step_1/input.csv",
        shell:
            """
            cd processing_step_1
            jupyter nbconvert --execute --to notebook --inplace process.ipynb
            """
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      • 1970-01-01
      • 2022-11-11
      相关资源
      最近更新 更多