Posts 为jekyll快速添加文件的Python脚本
Post
Cancel

为jekyll快速添加文件的Python脚本

jekina在不断地变化与发展, 本文很多内容已经过时

项目已托管在Github: jekina, 请关注持续更新的README文档

一、 前言

开发动力源于实际需求, 我深切体会到了

打算学习计算机视觉之后, 写文章免不了插入大量的图片, 原始的插入方法有点繁琐(只是有点), 我便有了一个写脚本让自己便利一些的想法—-也就是这篇文章讲的脚本, 于是有了上一篇文章的path_convertor, 便于我在WSL环境下对Windows目录复制文件

刚开始也没想这么多, 以为是一个随手一写的很简单的小玩意, 做出来之后才发现比我想象中稍稍复杂了一些(但还是很小), 当然收获也比想象中丰富一些

  • 第一次加入了强大而又有趣的元素: 命令行参数
  • 一个小巧好用的第三方模块(用来访问剪切板): pyperclip
  • 用来操作文件的内置模块(复制/移动/删除): shutil
  • 利用正则表达式、自己写的模块: path_convertor
  • 借鉴先前的经验, 有更加完善的路径管理和异常捕获
  • 日期格式化加到了学习日程中

二、 正篇

文章中除了展示用法, 也讲一下程序中比较有趣的东西

2.1 基本用法

首先要打开脚本, 修改预定义变量

  • 第一行是你的jekyll存放图片的路径
  • 第二行是文章中粘贴url的文本前缀
1
2
3
# 预定义变量
tar_img_wsl_path, throw = pc.abs_win2wsl('C:\\Users\\Reina\\OneDrive\\Chirpy\\assets\\images\\', pc.FOLDER_MODE)
jek_img_url = '/assets/images/'

改好保存就可以使用了!

我们看一个典型的应用场景:

我们在网上看到一个想将其加入到文章中的图片

see a picture

将其另存为(我懒到并不想选择路径和重命名, 直接保存到桌面)

save to desktop

打开脚本

open script

将图片拖入终端回车, 然后输入新的文件名

可以看到生成了文章所需的url, 并且将其复制到了剪切板, 我们可以直接粘贴路径到文章中

drag and rename

同时也将图片移动到了对应的路径中(程序默认在预设路径下, 按照当前日期创建目录进行归档)

moved

这样就实现了为文章快速添加图片!

2.2 使用命令行参数

这个脚本最大的有趣之处不在于偷懒(这应该是本分), 而在于命令行参数

虽然当前可选的参数少得可怜

但在今后对这个脚本的功能进行拓展的时候, 命令行参数无疑可以给我们无穷的想象空间

使用./jekina.py -h查看帮助吧!

1
2
3
4
5
6
7
8
9
10
11
$ ./jekina.py -h
usage: jekina.py [-h] [-c] [-r]

Move picture(s) to your jekyll picture hub, and return the url you need for
your site (print & clipboard)

optional arguments:
  -h, --help            show this help message and exit
  -c, --disable-clipboard
                        do not change the clipboard
  -r, --disable-rename  do not rename

我们可以

  • 通过./jekina.py -c./jekina.py --disable-clipboard来禁用复制到剪切板的功能
  • 通过./jekina.py -r./jekina.py --disable-rename来禁用重命名, 让整个过程更加丝滑
  • 通过./jekina.py -cr同时实现以上两者

使用到了内置的强大的argparser模块, 具体实现请参考源码

(结尾激动)命令行参数是多么让人振奋的特性!

2.3 两个小巧实用的模块

  • 内置模块shutil, 实现文件的复制/粘贴/删除, 用法相当直接:
1
2
3
4
shutil.copy(src, dst)		# cp src dst
shutil.copy2(src, dst)		# cp -p src dst (保留元数据)
shutil.copytree(src, dst)	# cp -r src dst
shutil.move(src, dst)		# mv src dat
  • 第三方模块pyperclip, 用法更直接
1
2
pyperclip.copy(str)		# 把str拷贝到剪切板
pyperclip.paste()		# 返回剪切板的内容

2.4 完善思路

  • 可以不局限于图片, 稍加改动后拓展到多个目录、任何文件
  • 可以通过命令行参数取消按日期归档, 提高通用性
  • 加入文章目录链接生成, 目标是功能全面+集成的jekyll文章辅助脚本

三、 参考资料

  • David Beazley & Brian K.Jones - Python Cookbook (3rd edition)
This post is licensed under CC BY 4.0 by the author.