1

我正在尝试执行我RemoveCellsWithNoTags在命令行上编写的自定义预处理器。按照文档,这是我尝试的命令

jupyter nbconvert --Exporter.preprocessors=["custompreprocessor.RemoveCellsWithNoTags"] --to script mynotebook.ipynb

这给了我以下错误

zsh: no matches found: --Exporter.preprocessors=[custompreprocessor.RemoveCellsWithNoTags]

标准命令工作正常

jupyter nbconvert --to script mynotebook.ipynb

为了完整起见,这里是我custompreprocessor.py文件中的代码。

from nbconvert.preprocessors import Preprocessor

class RemoveCellsWithNoTags(Preprocessor):

    def preprocess(self, notebook, resources):
        notebook.cells = [cell for cell in notebook.cells if 'tags' in cell.metadata]
        return notebook, resources

更新 #1 - 使用配置文件的解决方法

我已经设法使用配置文件使它工作,虽然这对我来说并不理想,但它正在工作。

nb_convert_config.py文件内容

c = get_config()

c.NbConvertApp.notebooks = ['mynotebook.ipynb']
c.NbConvertApp.export_format = 'python'
c.Exporter.preprocessors = ['custompreprocessor.RemoveCellsWithNoTags']

然后命令变为

jupyter nbconvert --config nbconvert_config.py
4

2 回答 2

2

您可能只需要从您的外壳中转义[and (似乎是zsh ):]

jupyter nbconvert \
  --Exporter.preprocessors=\["custompreprocessor.RemoveCellsWithNoTags"\] \
  --to script mynotebook.ipynb

线索在您收到的错误消息中

zsh: no matches found: --Exporter.preprocessors=[custompreprocessor.RemoveCellsWithNoTags]

错误消息来自外壳 -不是 jupyter-nbconvert

于 2019-01-30T21:33:03.697 回答
2

语法如下:

preprocess.py

from nbconvert.preprocessors import Preprocessor

class RemoveCellsWithNoTags(Preprocessor):
    def preprocess(self, notebook, resources):
        executable_cells = []
        for cell in notebook.cells:
            if cell.metadata.get('tags'):
                if "skip" in cell.metadata.get('tags'):
                    continue
            executable_cells.append(cell)
        notebook.cells = executable_cells
        return notebook, resources

然后导出笔记本:

jupyter nbconvert --Exporter.preprocessors=[\"preprocess.RemoveCellsWithNoTags\"] getting-started-keras.ipynb
于 2020-02-07T06:16:49.553 回答