目录

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))