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

Jupyter notebook 如何自动删除Jupyter笔记本中的所有空行?,jupyter-notebook,Jupyter Notebook,我的Jupyter笔记本上有很多空行。如前所述,目前我必须通过单击D+D删除每一行。有没有办法自动删除所有空行?Esc D D删除当前单元格,是指空白单元格而不是空行 如果是这样,将以下代码放入~/.jupyter/custom/custom.js将在工具栏上添加一个按钮,删除所有空白单元格 define([ 'base/js/namespace', 'base/js/events' ], function(Jupyter, events) { events.on('ap

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

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
,但可以随意将其更改为笔记本本身未保留的任何快捷键,您可以通过单击“帮助”>“键盘快捷键”来检查现有的键盘快捷键):

如果您的意思是删除单元格中的空行,则需要对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次之后,它们会删除所有内容。

我尝试使用您的快捷方式删除单元格中的空行,但我收到一个未捕获的类型错误:无法读取未定义的属性“text”,对此有何想法?谢谢嗯,这是说有一条未定义的线。即使我创建一个新的空白代码单元,它仍然有定义的第一行。您是否正在运行旧版本的笔记本(因为它会有旧版本的CodeMirror)?你能把你的笔记本上传到某个地方吗,或者至少试着缩小问题的范围?因为现在它在我的电脑上运行得非常好。抱歉,我不太清楚为什么以前会发生这种情况,但我让你的扩展工作,并将它调整为单细胞。我的唯一问题是,我发现,如果在同一个单元格上重新执行空白行删除,它会将行之间没有空行的行组合成一行。
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;
            }}
        );
    });
});