Python脚本:新建一个带有FrontMatter的markdown文件
目录
Python脚本:新建一个带有FrontMatter的Mark文件
主要用到 hashids
库来生成slug
,这个slug
的输入是当前时间距离1970年1月1日的秒数,对个人来说是比较合适的。
然后还用到os.system
调用 macOS 的open
命令以打开这个文件,默认用的Typora打开。
然后还用到sys.argv
,如果后面还有命令行参数,不管是什么打印当前的日期时间,方面填入 FrontMatter 中的updateAt
字段。
注意:
input
在终端里面要想用方向键左移右移,一定要导入readline
。- 如果用 HUGO,日期字段必须 iso 格式 / utc 格式。
#! /usr/local/bin/python3
import sys, os, readline
from datetime import datetime
from hashids import Hashids
from pytz_deprecation_shim import timezone
md_string = \
"""\
---
title: "{name}"
category: {cate}
tags:
{tags}
remark: "{remark}"
slug: {slug}
publishAt: {publishTime}
createAt: {timeFt}
updateAt: {timeFt}
---
##
"""
def get_time_now():
timeNow = datetime.now(tz=timezone("Asia/shanghai"))
print(timeNow.isoformat())
if __name__ == "__main__":
########### 用法 ##########
# 新建并打开文件 ./newMD.py
# 打开文件夹 ./newMD.py o
# 打印ISO时间 ./newMD.py t
########### 默认信息 ##########
filepath = "/Users/yuhanliu/Documents/projects/temp"
############### 命令行参数 ############## 如果后面还有除o以外的随便的字符则打印当前时间
if len(sys.argv) > 1:
if sys.argv[1] == "o":
os.system('open "{}"'.format(filepath))
else: get_time_now()
exit(0)
timeNow = datetime.now(tz=timezone("Asia/shanghai"))
timeFt = timeNow.isoformat() # hugo 必须 iso 格式 / utc 格式
cate = "tech"
tags = ["碎片学习"]
remark = ""
# 从1970年1月1日以来的秒数: 来生成 HashID!
timeNowSeconds = int(datetime.timestamp(timeNow))
hashids = Hashids()
slug = hashids.encode(timeNowSeconds)
name = "{}-{}-{}-{}".format(timeNow.year, timeNow.month, timeNow.day, slug)
########### 信息读取 ##########
nameCandidate = input("标题: ({}) ".format(name))
if nameCandidate != "": name = nameCandidate
cateCandidate = input("分类: ({}) ".format(cate))
if cateCandidate != "": cate = cateCandidate
tagsCandidate = input("标签: ({} [空格隔开]) ".format(" ".join(tags)))
# 处理标签数组为 \t- tag\n形式
if tagsCandidate != "": tags = tagsCandidate.split(' ')
tagsStr = ""
for index, tag in enumerate(tags):
tagsStr = tagsStr + " - {}".format(tag) # 注意 YAML 不能用\t缩进
if index != len(tags) - 1: tagsStr = tagsStr + "\n"
remark= input("备注: ".format(remark))
publishTime= input("是否发布: (默认发布, n不发布) ")
if publishTime == "n": publishTime = "null"
else: publishTime = timeFt
########### 文件生成 ##########
filefullpath = os.path.join(filepath, name + ".md")
md_string = md_string.format(name=name, cate=cate, tags=tagsStr, remark=remark, slug=slug, timeFt=timeFt, publishTime=publishTime)
if not os.path.exists(filefullpath):
with open(filefullpath, "a") as f:
f.write(md_string)
else:
print("文件 {} 已经存在!".format(filefullpath))
########### 打开文件 ##########
os.system('open "{}"'.format(filefullpath))