jupyter notebook中ipynb文件输出内容太多打不开的解决方法

前言

jupyter notebook在数据分析和建模领域是一把利器,可以一行一行或者一个cell一个cell看输出结果,把复杂的问题简单化。

每一个变量都是有缓存的,当流程比较复杂的时候,可以直接从某一步重新开始,而不是重头开始,这样就大大提高了效率。

jupyter notebook优点很多,但是因为缓存也可能会改变了原本数据,或者变量的值做了其他改变却不知,当然本文记录的却是其他问题:输出内容太多,导致jupyter notebook中ipynb文件太大而导致文件打不开。

有许多方式可以解决当前问题。

方法一

如果文件还能打开,直接清除输出
Kernel --> Restart & Clear Output

在这里插入图片描述

如果文件打得开手动删除,或者使用方法一都可以,但是棘手的问题是如果文件已经打不开了,改怎么办呢?

方法二

复制一份源代码文件,形成一个新的文件

安装nbconvert插件,在cmd中输入

pip install jupyter_contrib_nbextensions

到要复制的文件目录下,然后复制一份新的源文件
输入以下命令, test.ipynb改为要复制的文件

jupyter nbconvert --ClearOutputPreprocessor.enabled=True --to notebook --output=NotebookNoOut test.ipynb

在这里插入图片描述
能看出来新生成的NotebookNoOut.ipynb仅仅只有2.04kB,仅仅保留了源代码。

方法三

还是需要先安装jupyter_contrib_nbextensions插件

直接在ipynb文件上将output删除

jupyter nbconvert --ClearOutputPreprocessor.enabled=True --inplace test.ipynb

同样,test.ipynb改成自己的ipynb文件

方法四

使用记事本打开当前ipynb文件
在这里插入图片描述

"cells"后面的内容便是ipynb的所有cell,"outputs"便是显示信息,outputs中的"text"便是输出的内容,将[]中的内容删除,当前的输出信息便成空,只需要找到导致文件打不开的outputs的”text“后删除即可。

当前方法是比较推荐的方法,毕竟不需要安装任何东西,并且选择性的删除输出内容。

方法五 通过代码提取

import json

with open('test.ipynb', 'r', encoding='utf8')as f:
    json_data = json.load(f)

for i in range(len(json_data['cells'])):
    tmp = json_data['cells'][i]['source']
    print("cell", json_data["cells"][i]["execution_count"])
    for j in tmp:
        print(j, end = '')
    print('\n')

在这里插入图片描述
此处提取出来的便是每隔cell的代码了,但是呢ipynb的代码结构却发生了变化,使用起来就不方便了。

如果进一步,保留代码和代码格式该如何处理呢?

既然ipynb是通过某种格式存储的,那么保留存储格式即可,将text后面置为[]即可。

代码:

import json

with open('./Untitled1.ipynb', 'r', encoding='utf8') as f:
    json_data = json.load(f)

for cell in json_data['cells']:
    if 'outputs' in cell:
        for output in cell['outputs']:
            if 'text' in output:
                output['text'] = []

with open('test-copy.ipynb', 'w', encoding='utf-8') as file:
    file.write(json.dumps(json_data, indent=2, ensure_ascii=False))

运行结果
产生一个名为test-copy.ipynb的文件,使用jupyter notebook打开
在这里插入图片描述
和上边的命令得到的结果完全相同,实现了直接所有输出都去掉的功能,这样文件便非常小,可以打开了。

当前方法也是比较推荐的方法,不需要安装任何东西,输出内容的内容可以增加更多的判断,比如输出内容的长度等。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值