为知笔记批量转换为Markdown格式的过程

由于最新版本的为知笔记无法批量导出,所以只能想其他办法。

 最开始的想法是以现有的ziw 文件为基础,判断从什么时候的笔记开始没有存档的,单独导出这些没有存档的笔记。但是真的不甘心,一篇一篇的导出要操作到猴年马月。

 

带着不甘心搜索大家的博客分享,最后发现了两篇不错的博文

 

一篇博客 提到

可以用老版本的为知笔记下载所有的ziw笔记数据,

也可以用第三方客户端下载所有数据,比如Memocast (为知笔记客户端),据说这个客户端能批量把文件夹导出为Markdown,这个软件的最后更新也是20221月份了。

 

我执拗的选择了老版本为知笔记下载所有数据。

老版本的客户端下载地址:

https://www.wiz.cn/zh-cn/downloads-windows.html

4.14.4 ——最后的经典版本。

另外一篇博客是 https://www.paincker.com/wiz-export-html-md/

江小兄弟在文章中的代码稍微修改就可以在ubuntu下使用。

Ubuntu下可以安装pandoc来转换htmlmd文件,xargs也可以使用,不过ubuntu下面没有-S参数,我就随手用了-s参数,也没有感觉到影响。

过程中还用了批量重命名工具批量把htmlutf-16 转换为了utf-8格式。

互联网经常失效,所以我存档了一份pdf放在下面。

1699966549-知笔记批量导出 HTML 并转换为 Markdown _ Paincker

 

我是把所有笔记文件夹都复制了一份,

用搜索把这个文件夹下所有的ziw文件搜索出来,

然后右键解压到单独的文件。

后又写了python脚本重命名文件,最后得到了  笔记文章名.html 的文件。

 

代码如下:


from importlib.metadata import files
import os,shutil


def rename(root_folder):
    for root, dirs,files in os.walk(root_folder):
        把 文件夹名xxxxx/index.html 复制到 文件夹名xxxxx 同文件夹下并重命名为 文件夹名xxxxx.html
        for file in files:
            filename, file_extension = os.path.splitext(file)
            if file_extension == '.html':
                new_prefix = os.path.basename(root)
                new_name = f"{new_prefix}{file_extension}"
                old_filepath = os.path.join(root, file)
                new_root = os.path.abspath(os.path.dirname(root))
                new_filepath = os.path.join(new_root, new_name)
                ## print(new_filepath)
                shutil.move(old_filepath, new_filepath)
                print(f'重命名 {old_filepath} 为 {new_filepath}')
        #把 index_files 文件夹下的文件复制到 上级文件夹中,并且删除 index_files 文件夹
        for dir in dirs:
            if dir == "index_files":
                old_filepath = os.path.join(root, dir)
                new_prefix = os.path.abspath(os.path.dirname(os.path.dirname(old_filepath)))
                new_filepath = os.path.join(root, dir)
                new_root = os.path.abspath(os.path.dirname(root))
                ### 文件夹名字
                dir_name = os.path.basename(root)
                new_filepath = os.path.join(new_root, dir_name)
                # shutil.move(old_filepath, new_filepath)
                mv_file(old_filepath, new_filepath)
                shutil.rmtree(old_filepath)
                print(f'重命名 {old_filepath} 为 {new_filepath}')

        for file in files:
            filename, file_extension = os.path.splitext(file)
            if file_extension == '.md':
                old_filepath = os.path.join(root, file)
                with open(old_filepath, "r", encoding="utf-8") as f:
                     data = f.read()
                data = data.replace("index_files",filename)
                with open(old_filepath, "w", encoding="utf-8") as f:
                     f.write(data)
                print(f'更新笔记 {filename} 中的超链接,搜索{old_filepath}')


def mv_file(src_base_dir, dst):
        for file in os.listdir(src_base_dir):
            src = src_base_dir + '\\' + file
            shutil.copy(src, dst)

root_folder = 'D:\Downloads\笔记导出'

rename(root_folder)

 

 代码打包如下

1699966740-wiznote_export.py

 

 

试用了Memocast,的确可以一个文件夹 一个文件夹的导出为Markdown,可是不知为何,笔记中的图片全部没有导出来。笔记中图片不多的可以试用此方法。

 

而我,还得继续写python代码,把图片路径替换为正确的路径。

(我重命名文件的时候顺手把文件挪动了位置,而且把图片文件夹名改成了笔记标题名。)

 

笔记名称中有各种不能做文件名的符合,其中艰辛,实难道也~~

版权声明:
作者:xinyu2ru
链接:https://www.rxx0.com/software/wei_zhi_bi_ji_pi_liang_zhuan_huan_wei_markdown_ge_shi_de.html
来源:RUBLOG-分享我的生活
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>