python每天20分钟_每天用 Jupyter 写 5 分钟的日记
用 Jupyter 和 Python 在你的日常写作背后实现一些自动化。
有些人会遵循传统,制定一年的计划。不过,一年的时间很长,所以我以季节性的主题或轨迹来规划。每个季度,我都会坐下来,看看即将到来的三个月的季节,并决定在这段时间里我将努力做什么。
对于我最新的主题,我决定要每天写一篇日记。我喜欢有明确的承诺,所以我承诺每天写 5 分钟。我也喜欢有可观察的承诺,哪怕只是对我而言,所以我把我的记录放在 Git 里。
我决定在写日记的过程中实现一些自动化,于是我使用了我最喜欢的自动化工具:Jupyter。Jupyter 有一个有趣的功能 ipywidgets,这是一套用于 Jupyter Notebooks、JupyterLab 和 IPython 内核的交互式 HTML 组件。
如果你想跟着本文的代码走,请注意,让你的 JupyterLab 实例支持组件可能有点复杂,请按照这些说明来进行设置。
导入 ipywidgets 模块
首先,你需要导入一堆东西,比如 ipywidgets 和 Twisted。Twisted 模块可以用来创建一个异步时间计数器:
importtwisted.internet.asyncioreactor
twisted.internet.asyncioreactor.install()
fromtwisted.internetimportreactor,task
importipywidgets,datetime,subprocess,functools,os
设置定时条目
用 Twisted 实现时间计数器是利用了 task.LoopingCall。然而,结束循环调用的唯一方法是用一个异常。倒计时时钟总会停止,所以你需要一个自定义的异常来指示“一切正常;计数器结束”:
classDoneError(Exception):
pass
现在你已经写好了异常,你可以写定时器了。第一步是创建一个 ipywidgets.Label 的文本标签组件。循环使用 divmod 计算出分和秒,然后设置标签的文本值:
deftime_out_counter(reactor):
label=ipywidgets.Label("Time left: 5:00")
current_seconds=datetime.timedelta(minutes=5).total_seconds()
defdecrement(count):
nonlocalcurrent_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}"
ifcurrent_seconds<0:
raiseDoneError("finished")
minute=datetime.timedelta(minutes=1)
call=task.LoopingCall.withCount(decrement)
call.reactor=reactor
d=call.start(1)
d.addErrback(lambdaf:f.trap(DoneError))
returnd,label
从 Jupyter 组件中保存文本
下一步是写一些东西,将你输入的文字保存到一个文件中,并提交到 Git。另外,由于你要写 5 分钟的日记,你需要一个能给你提供写字区域的组件(滚动肯定是可以的,但一次能看到更多的文字就更好了)。
这就用到了组件 Textarea,这是一个你可以书写的文本字段,而 Output 则是用来给出反馈的。这一点很重要,因为 git push 可能会花点时间或失败,这取决于网络。如果备份失败,用反馈提醒用户很重要:
defeditor(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)
defsave(_ignored):
withoutput:
withopen(fname,"w")asfpout:
fpout.write(textarea.value)
print("Sending...",end='')
try:
runner(["git","add",fname])
runner(["git","commit","-m",f"updated {fname}"])
runner(["git","push"])
exceptsubprocess.CalledProcessErrorasexc:
print("Could not send")
print(exc.stdout)
print(exc.stderr)
else:
print("Done")
textarea.observe(save,names="value")
returntextarea,output,save
continuous_update=False 是为了避免每个字符都保存一遍并发送至 Git。相反,只要脱离输入焦点,它就会保存。这个函数也返回 save 函数,所以可以明确地调用它。
创建一个布局
最后,你可以使用 ipywidgets.VBox 把这些东西放在一起。这是一个包含一些组件并垂直显示的东西。还有一些其他的方法来排列组件,但这足够简单:
defjournal():
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)
returnbox
biu!你已经定义了一个写日记的函数了,所以是时候试试了。
journal()
Jupyter journal
你现在可以写 5 分钟了!
python每天20分钟_每天用 Jupyter 写 5 分钟的日记相关推荐
- mysql 日期减10分钟_获取当前时间减去10分钟的话SQL语句怎么写
获取当前时间减去10分钟的话SQL语句怎么写 Mysql日期和时间函数不求人 本文出自:http://linuxdb.yeah.net 作者: 晏子 (2001-07-05 15:00:00) 对于每 ...
- jupyter notebook和python有什么区别_如何在Jupyter Notebook中使用Python虚拟环境?
如何在使用Jupyter Notebook时,解决Python虚拟环境间的切换问题?本文一步步帮你拆解.希望你能够避免踩坑的痛苦,把更多的时间花在愉快的编程上. 痛点 Python目前有两个主版本并存 ...
- 饿了么超时20分钟_饿了么:5分钟;美团:8分钟......消费者:???
点击上方"华商报"可快速关注哦! 9月8日,一篇名为<外卖骑手,困在系统里 >的文章刷屏,文章指出,在外卖系统的算法与数据驱动下,外卖骑手疲于奔命,导致他们违反交通规则 ...
- python浏览器怎么设置_怎么设置jupyter的默认浏览器
设置jupyter的默认浏览器: 1.打开cmd,首先进入到Jupyter的安装目录,然后,输入命令"jupyter notebook --generate-config" 2.执 ...
- python安装死机_安装时jupyter笔记本的R内核死机
我刚刚在Windows10上安装了jupyter笔记本的R内核,在这个post中得到了与OP相同的错误.下面粘贴的是我单击"内核错误"按钮时显示的错误.在Traceback (mo ...
- python秒数变分钟_将毫秒转换为小时、分钟和秒python
我刚开始编写这段代码,但当我试图运行它时,我总是在主程序上得到无效语法.def convertMillis(millis): seconds=(milli/1000)%60 minutes=(mill ...
- python k线合成_手把手教你写一个Python版的K线合成函数
手把手教你写一个Python版的K线合成函数 在编写.使用策略时,经常会使用一些不常用的K线周期数据.然而交易所.数据源又没有提供这些周期的数据.只能通过使用已有周期的数据进行合成.合成算法已经有一个 ...
- python怎么输入程序代码_学习用 Thonny 写代码: 一个面向初学者的Python IDE
学习编程很难.即使当你最终怎么正确使用你的冒号和括号,但仍然有很大的可能你的程序不会如果所想的工作. 通常,这意味着你忽略了某些东西或者误解了语言结构,你需要在代码中找到你的期望与现实存在分歧的地方. ...
- java获取当前分钟_分别获取当前年月日 小时 分钟 秒 毫秒
[java]代码库/** * 英文简写(默认)如:2010-12-01 */ public static String FORMAT_SHORT = "yyyy-MM-dd"; / ...
最新文章
- optee内存管理和页表建立
- 添加或删除jupyter notebook的虚拟环境
- [转贴]暴雪的霸王条款是否合理?
- linux很容易忽略的rz上传、sz下载命令
- 【2022年战略管理公开课计划】向华为学习 业务领先的战略规划SP(BLM)和战略解码BP(BEM)
- ES分片UNASSIGNED解决方案(ALLOCATION_FAILED,REPLICA_ADDED,NODE_LEFT,REINITIALIZED,CLUSTER_RECOVERED等等)
- SamSung WLAN AP:RCE漏洞复现
- unity下载并和vs2019关联的步骤
- 无线传感器网络技术与应用课后习题部分答案
- 77% 的 Android 手机已换上 Eclair 或 Froyo 系统
- 篡改页面的Js代码,从而达到为所欲为的目的
- LeetCode力扣刷题——居合斩!二分查找
- 哈姆雷特的机器人可以合体吗_饥荒哈姆雷特机器人wx-78怎么样 机器人wx-78人物属性详解...
- matlab绘制星形线并求面积,星形线面积怎么求
- python机器学习视频教程百度网盘下载?
- 初入社会经验必备能力总结
- 好用的老照片修复神器软件有哪些?这三个工具帮你留住回忆
- HFSS仿真线型抛物面圆极化天线
- 2022-9 做题时查漏补缺QVQ
- 计算机应用基础讨论题目,计算机应用基础简答的题目答案.doc
热门文章
- UI设计新趋势|拟物风格UI设计素材模板
- 色彩艺术海报PSD模板 | 用色彩挑动你的情趣
- python中re模块_Python中re(正则表达式)模块学习
- qcow2 磁盘在线扩容方法
- Linux内核跟踪eBPF:bpftrace 参考指南
- OpenStack Glance(镜像服务)基础架构:Basic architecture
- python搭配什么数据库_教你如何优雅地用Python连接MySQL数据库
- web前端基础(03html列表知识)
- java json 修改字段_我们如何使用Java中的Jackson来更改JSON中的字段名称?
- linux下查看usb插拔日志,Linux:如何检测usb键盘是否已插入和拔出