jupyter-notebook - 如何自动删除Jupyter笔记本中的所有空行?

标签 jupyter-notebook

我的 Jupyter 笔记本充满了很多空行。目前,我必须通过单击 D+D 来删除每一行,如所述 here 。有没有办法自动删除所有空白行?

最佳答案

Esc D D 删除当前单元格,您的意思是空白单元格而不是空行吗?

如果是这样,将以下代码放入~/.jupyter/custom/custom.js中将在工具栏上添加一个按钮,该按钮将删除所有空白单元格

define([
    'base/js/namespace',
    'base/js/events'
], function(Jupyter, events) {
    events.on('app_initialized.NotebookApp', function(){
        Jupyter.toolbar.add_buttons_group([
            {
                'label'   : 'delete all blank cells',
                'icon'    : 'fa-ban', // select your icon from http://fortawesome.github.io/Font-Awesome/icons
                'callback': function () {
                    var cells = Jupyter.notebook.get_cells();
                    cells.forEach(function(cell) {
                        if(cell.get_text() === "") {
                            var index = Jupyter.notebook.find_cell_index(cell);
                            Jupyter.notebook.delete_cell(index);
                        }
                    });
                }
            }
        ]);
    });
});

如果您更喜欢键盘快捷键而不是按钮,请使用此快捷键(我使用过 Alt-D,但请随意将其更改为笔记本本身未保留的任何您想要的内容,您可以通过单击“帮助”>“键盘快捷键”来检查现有的键盘快捷键):

define([
    'base/js/namespace',
    'base/js/events'
], function(Jupyter, events) {
    events.on('app_initialized.NotebookApp', function(){
        Jupyter.keyboard_manager.command_shortcuts.add_shortcut('Alt-D', {
            help : 'delete blank cells',
            help_index : 'zz',
            handler : function (event) {
                var cells = Jupyter.notebook.get_cells();
                cells.forEach(function(cell) {
                    if(cell.get_text() === "") {
                        var index = Jupyter.notebook.find_cell_index(cell);
                        Jupyter.notebook.delete_cell(index);
                    }
                });
                return false;
            }}
        );
    });
});

如果您的意思是删除单元格内的空行,则需要在 CodeMirror 中进行更多的工作。这是一个按钮版本:

define([
    'base/js/namespace',
    'base/js/events'
], function(Jupyter, events) {
    events.on('app_initialized.NotebookApp', function(){
        Jupyter.toolbar.add_buttons_group([
            {
                'label'   : 'delete all blank lines',
                'icon'    : 'fa-ban', // select your icon from http://fortawesome.github.io/Font-Awesome/icons
                'callback': function () {
                    var cells = Jupyter.notebook.get_cells();
                    cells.forEach(function(cell) {
                        if(cell.cell_type === "code") {
                            var cm = cell.code_mirror;
                            cm.eachLine(function(line) {
                                if(!line.text) {
                                    var line_num = cm.getLineNumber(line);
                                    cm.setSelection({line: line_num - 1, ch: 255},{line: line_num + 1, ch: 0});
                                    cm.replaceSelection("");
                                }
                            });
                        }
                    });
                }
            },
        ]);

这是键盘快捷键版本:

define([
    'base/js/namespace',
    'base/js/events'
], function(Jupyter, events) {
    events.on('app_initialized.NotebookApp', function(){
        Jupyter.keyboard_manager.command_shortcuts.add_shortcut('Alt-C', {
            help : 'delete blank lines',
            help_index : 'zz',
            handler : function (event) {
                var cells = Jupyter.notebook.get_cells();
                cells.forEach(function(cell) {
                    if(cell.cell_type === "code") {
                        var cm = cell.code_mirror;
                        cm.eachLine(function(line) {
                            if(!line.text) {
                                var line_num = cm.getLineNumber(line);
                                cm.setSelection({line: line_num - 1, ch: 255},{line: line_num + 1, ch: 0});
                                cm.replaceSelection("");
                            }
                        });
                    }
                });
                return false;
            }}
        );
    });
});

如果您连续有多个空白行,您可能需要激活它们几次 - 因为当我尝试使用它们时,它们不会在第一遍中删除所有空白行,但在 2 或 3 次之后,它们会删除所有内容。

关于jupyter-notebook - 如何自动删除Jupyter笔记本中的所有空行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42991535/

相关文章:

python - 努力处理 Jupyter Notebook 中的路径

python - 是否可以在 jupyter 中重定向单元格输出

python - 无法在 Visual Studio Code 中启动 Jupyter Notebook

python - 如何在 Jupyter Notebook 中禁用单元格截断?

python - 将 Jupyter 笔记本连接到远程服务器

python - 将类型实例转换为字典

keyboard-shortcuts - Cmd 键在 iPython 的 Jupyter 中不起作用

python - 如何使用 CSV 输入共享 Jupyter Notebook

python - 在 jupyter/iPython notebook 脚本和类方法之间同步代码

python - 使用 SSH+screen 远程启动 IPython,然后分离并注销