Obsdian批量插入模板

294 阅读2分钟

Obsdian批量插入模板

#java #python #obsdian #文件批量操作

所需工具

python或者java

搭配Obsdian插件

dataview :批量插入头模板便于dataview插件进行统计 dataview的基本使用可以参考 LillianWho的知乎回答 obsidian插件之dataview入门 - 知乎 (zhihu.com)

模板样式

---
author: fantasy
theme: java
status: no
---

用前必读

由于本人并不会python,python代码存在写入中文乱码问题未解决,使用python尽量不要在写中文 使用前最好新建一个文件夹对功能测试

使用步骤

  1. 在需要批量插入文件的文件夹创建一个python文件,将python代码粘贴到文件内
  2. 在倒数第二行有注释处编辑你的模板font=""
  3. 运行文件 

使用效果

gh

python代码

from datetime import datetime

import os

def recursive_listdir(path):

    files = os.listdir(path)

    for file in files:

        file_path = os.path.join(path, file)

        if os.path.isfile(file_path):

            if file_path.endswith('.md'):

              with open(file_path, "r+") as f_md:

                old = f_md.read()

                f_md.seek(0)

                f_md.write(font);

                f_md.write(old)

            print(file_path)

        elif os.path.isdir(file_path):

          recursive_listdir(file_path)

path = os.curdir

now = datetime.now()

#在此处编辑要插入的文件头内容

font='---\nauthor: fantasy\ntheme: java\nstatus: no\ndate: '+now.strftime("%Y-%m-%d %H:%M:%S")+'\n---\n'

recursive_listdir(path)

Java代码版本

package com.test;  
  
/**  
 * @author fantasy  
 * @version $ Id: W, v 0.1 2023/03/04 8:50 Administrator Exp $  
 */  
import java.io.File;  
import java.io.RandomAccessFile;  
import java.util.ArrayList;  
import java.util.List;  
  
public class AddMdFont {  
    //填写要操作的文件夹  
    public static final String PATH = "F://desktop//testMdd";  
    //添加要在文件头追加的内容  
    public static final String header = "--文件头--";  
  
    public static void main(String[] args) throws Exception {  
  
        File dir = new File(PATH);  
        List<File> fileList = new ArrayList<File>();  
        List<File> newfileList = getAllFile(dir, fileList);  
        if (newfileList == null) {  
            System.out.println("文件为空");  
            return;  
        }  
        for (File file : newfileList) {  
            if (file.getName().endsWith(".md")) {  
                appendFileHeader(header.getBytes(), file.getAbsoluteFile().toString());  
            }  
        }  
  
    }  
  
    /**  
     * 向src文件添加header  
  * @param header  
     * @param srcPath  
     * @throws Exception  
     */    private static void appendFileHeader(byte[] header, String srcPath) throws Exception {  
        RandomAccessFile src = new RandomAccessFile(srcPath, "rw");  
        int srcLength = (int) src.length();  
        byte[] buff = new byte[srcLength];  
        src.read(buff, 0, srcLength);  
        src.seek(0);  
        src.write(header);  
        src.seek(header.length);  
        src.write(buff);  
        src.close();  
    }  
  
    /**  
     * 获取MD文件列表  
     *  
     * @param fileInput  
     * @param allFileList  
     * @return  
     */  
    public static List<File> getAllFile(File fileInput, List<File> allFileList) {  
        // 获取文件列表  
        File[] fileList = fileInput.listFiles();  
        for (File file : fileList) {  
            if (file.isDirectory()) {  
                // 递归处理文件夹  
                // 如果不想统计子文件夹则可以将下一行注释掉  
                getAllFile(file, allFileList);  
            } else {  
                // 如果是MD文件则将其加入到文件数组中  
                if (file.getName().endsWith(".md")) {  
                    allFileList.add(file);  
                }  
            }  
        }  
        return allFileList;  
    }  
  
}