首页 > 编程知识 正文

日志怎么做(教你写日记)

时间:2023-05-05 22:59:09 阅读:84268 作者:2397

使用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, 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 journal

你现在可以写 5 分钟了!


via: opensource.com

作者: Moshe Zadka 选题: lujun9972 译者: wxy 校对: wxy

本文由 LCTT 原创编译, Linux中国 荣誉推出

点击“了解更多”可访问文内链接

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。