【问题标题】:Python: print() always writes to .ipynb making file too largePython:print() 总是写入 .ipynb 使文件太大
【发布时间】:2014-07-04 02:06:52
【问题描述】:

切入正题,我想知道如何在 ipython 笔记本中显示打印语句,同时防止这些语句保存到 .ipynb 文件中。目的是制作一个不会使文件大小过大的进度条。

背景是我一直在编写一些 python 代码,它制作了一堆 png 文件,以便我最终可以将它们编译成 GIF。当我这样做的时候,我想我会很聪明,并使用print() from __future__ 和回车来打印任务的进度。不幸的是,虽然我的代码有两个问题,但我认为这两个问题都与我对此进度消息的实现有关。

第一个问题是github对文件大小的限制:

当我第一次尝试将我的文件上传到 github 时,它阻止了我这样做,因为它超过了 100 MB 的限制。在调查了我的 .ipynb 文件后,我发现有大量的打印语句被保存在那里。最初我认为包含'\r' 来执行回车会阻止这种情况,但显然情况并非如此。

第二个问题大概和这个有关:

通常我在创建前几个 GIF 时没有问题,特别是如果我不包含那么多帧,但除此之外,我的 python 笔记本崩溃了。如果这是一个典型的内存问题,我想它只会向我抛出一个错误,但它不会,而是立即死在我身上。

以下是导致 .ipynb 文件膨胀的示例:

{
   "output_type": "stream",
   "stream": "stdout",
   "text": [
    "\r",
    "frame 1 -- 0.480% complete -- U_avg = -7.200000\r",
    "frame 1 -- 0.500% complete -- U_avg = -7.200000\r",
    "frame 1 -- 0.520% complete -- U_avg = -7.200000\r",
    "frame 1 -- 0.540% complete -- U_avg = -7.200000\r",
    "frame 1 -- 0.560% complete -- U_avg = -7.200000\r",
    "frame 1 -- 0.580% complete -- U_avg = -7.200000\r",
    "frame 1 -- 0.600% complete -- U_avg = -7.200000\r",
    "frame 1 -- 0.620% complete -- U_avg = -7.200000\r",
    "frame 1 -- 0.640% complete -- U_avg = -7.200000\r",
    "frame 1 -- 0.660% complete -- U_avg = -7.200000\r",
    "frame 1 -- 0.680% complete -- U_avg = -7.200000\r",
    "frame 1 -- 0.700% complete -- U_avg = -7.200000\r",
    "frame 1 -- 0.720% complete -- U_avg = -7.200000\r", ......

我研究了其他人是如何实现进度条的,但他们似乎没有做任何特别的事情,这实际上可以防止我遇到的问题。如果归根结底,我不介意在黑匣子中导入可以解决此问题的东西,但同时,如果我在不同的上下文中遇到此问题,了解如何减少 .ipynb 将很有用通过删除保存的打印语句来调整文件大小。

谢谢!

【问题讨论】:

    标签: python memory-management progress-bar filesize carriage-return


    【解决方案1】:

    我能想到两种可能的解决方案:

    1. 添加条件以便仅在取得重大进展时打印?即只打印整个百分点。

    2. 使用 Javascript 显示和更新您的进度条。 Javascript 需要定期调用 ipython 内核来获取进度更新。示例:https://jakevdp.github.io/blog/2013/06/01/ipython-notebook-javascript-python-communication/

    【讨论】:

    • 第一个选项在我的情况下并不是特别有用,因为我多次调用特定函数并且因为跟踪计算的“U_avg”值非常有用(虽然总比没有好)。如果我学了一点java(也许是时候开始),第二个可能会很有用。由于我认为没有办法通过内置的 python 命令来做到这一点,我想知道是否可以实时编辑 .py 文件(或在我的情况下为 .ipynb 文件)以删除这些打印行它们的生产不会产生某种不利影响。
    猜你喜欢
    • 2013-12-09
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 2021-09-19
    相关资源
    最近更新 更多