首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Snakemake时如何在笔记本中加载文件?

使用Snakemake时如何在笔记本中加载文件?
EN

Stack Overflow用户
提问于 2022-06-23 15:55:31
回答 2查看 128关注 0票数 1

在一个有几个步骤的数据处理项目中,使用Snakemake,子目录中有一个Python木星笔记本,它处理一些数据:

笔记本processing_step_1/process.ipynb包含:

代码语言:javascript
运行
复制
with open('input.csv') as infile:
    for line in infile:
        print(line)

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

代码语言:javascript
运行
复制
one,two,three
1,2,3

这是使用Snakefilenotebook

代码语言:javascript
运行
复制
rule process_data:
    input:
        "processing_step_1/input.csv",
    notebook:
        "processing_step_1/process.ipynb"

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

代码语言:javascript
运行
复制
jupyter nbconvert --execute --to notebook processing_step_1/process.ipynb

它起作用了。工作目录被设置为笔记本的目录,输入文件可以用一个相对路径找到。

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

代码语言:javascript
运行
复制
snakemake -c1

我收到一条错误消息

代码语言:javascript
运行
复制
FileNotFoundError: [Errno 2] No such file or directory: 'input.csv'

这是因为笔记本是在不同的目录中复制和执行的,从Snakemake错误消息中可以看到:

代码语言:javascript
运行
复制
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时,从与笔记本相同的目录中加载数据文件的标准方法是什么?

我想仍然能够使用相同的笔记本独立,没有蛇马克。因此,最好我不想添加Snakemake特定的代码到它。

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

EN

回答 2

Stack Overflow用户

发布于 2022-06-24 03:38:26

@hfs (OP)解决方案是解决此问题的一种方法,但另一种方法是避免硬编码笔记本中的文件路径:

代码语言:javascript
运行
复制
# with open('input.csv') as infile: <- this is hard-coded
with open(snakemake.input[0]) as infile: # this is flexible
   ...

请注意,要使该解决方案工作,应该使用notebook指令而不是shell-nbconvert组合。

票数 3
EN

Stack Overflow用户

发布于 2022-06-23 15:55:31

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

代码语言:javascript
运行
复制
rule process_data:
    input:
        "processing_step_1/input.csv",
    shell:
        """
        cd processing_step_1
        jupyter nbconvert --execute --to notebook --inplace process.ipynb
        """
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72733187

复制
相关文章

相似问题

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