使用Jupyter和Python,在你日常写作的背后实现一些自动化。
来源: linux.cn •作者: Moshe Zadka •译者: Xingyu.Wang •
(正文字数(4400,阅读时间约) 5分钟) )。
有些人遵循传统,制定一年计划。 但是,因为一年很长,所以按季节性的主题和轨迹进行计划。 每季度,我都会坐下来,看看接下来三个月的季节,决定这个时间我要做什么。
关于我的最新主题,我决定每天写日记。 因为我喜欢有明确的约定,所以我答应每天写五分钟。 因为我也喜欢有对我来说可以观察的约定,所以我会把我的记录放进Git里。
我决定在写日记的过程中实现一些自动化。 所以我用了我最喜欢的自动化工具Jupyter。 Jupyter具有有趣的功能ipywidgets。 这是Jupyter Notebooks、JupyterLab和IPython内核的交互式HTML组件。
请注意,如果遵循本文中的代码,JupyterLab实例支持组件可能会有点复杂。 请按照这些步骤进行设定。
导入 ipywidgets 模块
首先,需要引入ipywidgets和Twisted等很多东西。 可以使用Twisted模块创建异步时间计数器。导入扭曲.互联网.异步控制器
twisted.internet.asyncioreactor.install (
来自twisted.internetimportreactor,任务
导入ipywidgets,日期,子流程,功能工具,操作系统
为了通过
设置定时条目
Twisted实现时间计数器,使用了task.looping呼叫。 但是,结束循环呼叫的唯一方法是使用例外。 因为倒计时钟总是停止,“一切正常; 计数器结束:classdoneerror (执行) :
传球
现在你写了异常。 我可以写计时器。 第一步是创建ipywidgets.Label的文本标签组件。 重复使用divmod计算分钟和秒,并设置标签的文本值。
deftime _ out _ counter (判断器) :
label=ipywidgets.label (timeleft :5336000 ) ) )。
current _ seconds=datetime.time delta (分钟=5) .总分钟) ) ) ) ) ) ) ) ) ) ) ) ) )。
def decrement (计数) :
非本地当前第二个
current _ seconds-=计数
time _ left=datetime.time delta (第二个=最大(目前的第二个,0 ) )
minutes,left=divmod(time_left,minute ) ) ) ) ) )。) ) ) ) ) ) ) ) ) ) ) )。
seconds=int (左.总_秒()
label.value=f ' timeleft : { minutes } : {第二季度336002 } '
国际货币基金组织0:
raisedoneerror (已完成) )。
minute=日期时间.时间增量(最小值=1) ) ) )。
呼叫=任务.呼叫. with计数(删除)
call .接收器=接收器
d=呼叫开始(1) )。
d.Adderrback (Lambdaf : f .陷阱)完全错误)
返回d,标签
从 Jupyter 组件中保存文本
"text-align: start">下一步是写一些东西,将你输入的文字保存到一个文件中,并提交到 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, savecontinuous_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 boxbiu!你已经定义了一个写日记的函数了,所以是时候试试了。
journal()你现在可以写 5 分钟了!
via: opensource.com
作者: Moshe Zadka 选题: lujun9972 译者: wxy 校对: wxy
本文由 LCTT 原创编译, Linux中国 荣誉推出