由于每次把*.md文件上载到blog都需要写一个复杂的yaml在开头,所以写了这个基于python的程序以减轻工作量。

代码如下:

import tkinter as tk
from tkinter import filedialog
from datetime import datetime
import os

#确定时间
now=datetime.now()
time0=now.strftime('%Y_%m_%d_%H_%M')

#文件选择器
path0=filedialog.askopenfilename(initialdir=r"url")
filename0 = os.path.basename(path0).rpartition('.')[0]
print('path =',path0)

def select_file(starting_folder=r'url'):
root = tk.Tk()
root.withdraw() # 隐藏主窗口
# 将 Tk 实例置于最前面
root.lift()
root.attributes('-topmost', True)
root.update()

# 打开文件选择对话框,起始文件夹为指定的 starting_folder
file_path = filedialog.askopenfilename(initialdir=starting_folder)

if file_path:
# 获取相对路径
relative_path = os.path.relpath(file_path, starting_folder).replace("\\", "/")
return '/img/'+relative_path
else:
return None

# print(select_file())

#标题name
name=input('文件标题(t_+内容/inh继承)|')
if name=='' or name=='t_':#纯时间
name=time0
elif name[0:2]=='t_':#时间+文本
if name[2:]=='inh':
name=time0+'_'+filename0
else:
name=time0+'_'+name[2:]
elif name=='inh':#继承原文件名
name=filename0

print(name)

# title
title=input('标题|')
# date0/1 yyyy-mm-dd[ hh:mm]
date0=input('创建日期(yyyy-mm-dd[ hh:mm]/n[ow])|')
if date0=='n':
date0=now.strftime('%Y-%m-%d %H:%M')
print(date0)
date1=input('更新日期(yyyy-mm-dd[ hh:mm]/n[ow])|')
if date1=='n':
date1=now.strftime('%Y-%m-%d %H:%M')
print(date1)
##
tags=input('tags标签|')
if ',' in tags: tags=f'[{tags}]'
categories=input('categories分类|')
if ',' in categories: categories=f'[{categories}]'
description=input('description|')
##
mathjax=input('mathjax|')
copyright_=input('copyright|')

##图像路径
topimg=input('设置顶图(*/n)|')
if topimg!='n':
topimg=select_file()
else: topimg=None
print(topimg)

cover=input('设置封面图(*/n)|')
if cover!='n':
cover=select_file()
else: cover=None
print(cover)

with open(f"../{name}.md",'w',encoding='utf-8') as f:
f.write('---\n')
f.write(f'title: {title}\n')
f.write(f'date: {date0}\n')
if date1: f.write(f'updated: {date1}\n')
f.write(f'tags: {tags}\n')
f.write(f'categories: {categories}\n')
f.write(f'description: {description}\n')
f.write(f'mathjax: {mathjax}\n')
if topimg: f.write(f'top_img: {topimg}\n')
if cover: f.write(f'cover: {cover}\n')
f.write('toc: true\n')
f.write(f'copyright: {copyright_}\n')
f.write('---\n')

with open(path0,'r',encoding='utf-8') as f1:
with open(f"../{name}.md",'a',encoding='utf-8') as f2:
f2.write(f1.read())

这样一来至少大部分工作可以自动完成了。


提取一些可能用到的一些模板语句:

  1. tkinter的文件选择器 基本的文件选择器只需一行

    #文件选择器
    path0=filedialog.askopenfilename(initialdir=r"url")
    filename0 = os.path.basename(path0).rpartition('.')[0]
    print('path =',path0)

    包括取文件路径和取文件名。

  2. 文件选择器增强版

    def select_file(starting_folder=r'url'):
    root = tk.Tk()
    root.withdraw() # 隐藏主窗口
    # 将 Tk 实例置于最前面
    root.lift()
    root.attributes('-topmost', True)
    root.update()

    # 打开文件选择对话框,起始文件夹为指定的 starting_folder
    file_path = filedialog.askopenfilename(initialdir=starting_folder)

    if file_path:
    # 获取相对路径
    relative_path = os.path.relpath(file_path, starting_folder).replace("\\", "/")
    return '/img/'+relative_path
    else:
    return None

    在前面进行一些窗口化的小操作,包括隐藏主窗口并且把tk实例置于最前,不然新出现的窗口可能会以非活动窗口的形式出现在最后面。

  3. 时间格式

    from datetime import datetime

    now=datetime.now()
    time0=now.strftime('%Y_%m_%d_%H_%M')

    注意datetimedatetime库下的类。不能直接引用datetime库。


有时间会解决一下Typora上传图片的机制,这样搬运带图片的blog应该会容易得多。

为了做个小小试验,先贴一张希儿的图片在下面。如果网页端加载图片和我想象的方式差不多的话,那么希儿的图片将会展现在下面。

希儿