为知笔记批量转换为Markdown格式的过程
由于最新版本的为知笔记无法批量导出,所以只能想其他办法。
最开始的想法是以现有的ziw 文件为基础,判断从什么时候的笔记开始没有存档的,单独导出这些没有存档的笔记。但是真的不甘心,一篇一篇的导出要操作到猴年马月。
带着不甘心搜索大家的博客分享,最后发现了两篇不错的博文
一篇博客 提到
可以用老版本的为知笔记下载所有的ziw笔记数据,
也可以用第三方客户端下载所有数据,比如Memocast (为知笔记客户端),据说这个客户端能批量把文件夹导出为Markdown,这个软件的最后更新也是2022年1月份了。
我执拗的选择了老版本为知笔记下载所有数据。
老版本的客户端下载地址:
https://www.wiz.cn/zh-cn/downloads-windows.html
4.14.4 ——最后的经典版本。
另外一篇博客是 https://www.paincker.com/wiz-export-html-md/,
江小兄弟在文章中的代码稍微修改就可以在ubuntu下使用。
Ubuntu下可以安装pandoc来转换html和md文件,xargs也可以使用,不过ubuntu下面没有-S参数,我就随手用了-s参数,也没有感觉到影响。
过程中还用了批量重命名工具批量把html的utf-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)
代码打包如下
试用了Memocast,的确可以一个文件夹 一个文件夹的导出为Markdown,可是不知为何,笔记中的图片全部没有导出来。笔记中图片不多的可以试用此方法。
而我,还得继续写python代码,把图片路径替换为正确的路径。
(我重命名文件的时候顺手把文件挪动了位置,而且把图片文件夹名改成了笔记标题名。)
笔记名称中有各种不能做文件名的符合,其中艰辛,实难道也~~
版权声明:
作者:xinyu2ru
链接:https://www.rxx0.com/software/wei_zhi_bi_ji_pi_liang_zhuan_huan_wei_markdown_ge_shi_de.html
来源:RUBLOG-分享我的生活
文章版权归作者所有,未经允许请勿转载。
czl
赞!最近我的为知笔记会员要到期了,正发愁怎么导出呢,感谢大佬的分享