良许Linux教程网 干货合集 通过Jupyter撰写日记

通过Jupyter撰写日记

Jupyter Notebook是一个开源的Web应用程序,允许用户创建和共享包含代码、方程式、可视化和文本的文档。它的用途包括:数据清理和转换、数值模拟、统计建模、数据可视化、机器学习等等。

image-20220316223943345

导入 ipywidgets 模块

首先,你需要导入一堆东西,比如 ipywidgets 和 Twisted。Twisted 模块可以用来创建一个异步时间计数器:

import twisted.internet.asyncioreactor
twisted.internet.asyncioreactor.install()
from twisted.internet import reactor, task
import ipywidgets, datetime, subprocess, functools, os

设置定时条目

用 Twisted 实现时间计数器是利用了 task.LoopingCall。然而,结束循环调用的唯一方法是用一个异常。倒计时时钟总会停止,所以你需要一个自定义的异常来指示“一切正常;计数器结束”:

class DoneError(Exception):
   pass

现在你已经写好了异常,你可以写定时器了。第一步是创建一个 ipywidgets.Label 的文本标签组件。循环使用 divmod 计算出分和秒,然后设置标签的文本值:

def time_out_counter(reactor):
   label = ipywidgets.Label("Time left: 5:00")
   current_seconds = datetime.timedelta(minutes=5).total_seconds()
   def decrement(count):
       nonlocal current_seconds
       current_seconds -= count
       time_left = datetime.timedelta(seconds=max(current_seconds, 0))
       minutes, left = divmod(time_left, minute)
       seconds = int(left.total_seconds())
       label.value = f"Time left: {minutes}:{seconds:02}"
       if current_seconds "finished")
   minute = datetime.timedelta(minutes=1)
   call = task.LoopingCall.withCount(decrement)
   call.reactor = reactor
   d = call.start(1)
   d.addErrback(lambda f: f.trap(DoneError))
   return d, label

从 Jupyter 组件中保存文本

下一步是写一些东西,将你输入的文字保存到一个文件中,并提交到 Git。另外,由于你要写 5 分钟的日记,你需要一个能给你提供写字区域的组件(滚动肯定是可以的,但一次能看到更多的文字就更好了)。

这就用到了组件 Textarea,这是一个你可以书写的文本字段,而 Output 则是用来给出反馈的。这一点很重要,因为 git push 可能会花点时间或失败,这取决于网络。如果备份失败,用反馈提醒用户很重要:

def editor(fname):
   textarea = ipywidgets.Textarea(continuous_update=False)
   textarea.rows = 20
   output = ipywidgets.Output()
   runner = functools.partial(subprocess.run, capture_output=True, text=True, check=True)
   def save(_ignored):
       with output:
           with open(fname, "w") as fpout:
               fpout.write(textarea.value)
           print("Sending...", end='')
           try:
               runner(["git""add", fname])
               runner(["git""commit""-m", f"updated {fname}"])
               runner(["git""push"])
           except subprocess.CalledProcessError as exc:
               print("Could not send")
               print(exc.stdout)
               print(exc.stderr)
           else:
                print("Done")
   textarea.observe(save, names="value")
   return textarea, output, save

continuous_update=False 是为了避免每个字符都保存一遍并发送至 Git。相反,只要脱离输入焦点,它就会保存。这个函数也返回 save 函数,所以可以明确地调用它。

创建一个布局

最后,你可以使用 ipywidgets.VBox 把这些东西放在一起。这是一个包含一些组件并垂直显示的东西。还有一些其他的方法来排列组件,但这足够简单:

def journal():
   date = str(datetime.date.today())
   title = f"Log: Startdate {date}"
   filename = os.path.join(f"{date}.txt")
   d, clock = time_out_counter(reactor)
   textarea, output, save = editor(filename)
   box = ipywidgets.VBox([
       ipywidgets.Label(title),
       textarea,
       clock,
       output
   ])
   d.addCallback(save)
   return box

biu!你已经定义了一个写日记的函数了,所以是时候试试了。

journal()
用Jupyter每天写日记用Jupyter每天写日记

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

1ad5ad6eddc451da964a8888a6fd5266d0163210
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

邮箱地址不会被公开。 必填项已用*标注

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部