从为知笔记迁移至 Notion

2022/1/4 软件教程Notion软件环境使用教程

其实为知笔记其实在 2018 年开始就已经闲置的状态,只是偶尔当作数据库来使用,用来查询数据。最近想着彻底不用为知笔记,主要是笔记形式已经僵化,受限于过去的数据与用户,产品进步幅度也特别慢。

# 一、前言

最近1-2 年「收集」-「阅读」-「笔记输出」流程其实发生巨大的变化,从过去「收集阅读」和「笔记输出」都放在一起,到现在将两者区分。「收集阅读」交给 flomo 和 Cubox,「笔记输出」交给 Notion。

其实为知笔记其实在 2018 年开始就已经彻底闲置的状态,只是偶尔当作数据库来使用,用来查询数据。最近想着彻底不用为知笔记,主要是笔记形式已经僵化,受限于过去的数据与用户,产品进步幅度也特别慢。

# 二、如何将 为知笔记 数据搬迁 Notion

基本思路:「使用 wiz2joplin 导出数据」— 「导入 Joplin」-「Joplin 导出 Markdown」-「使用 md2notion 导入数据」

wiz2joplin 项目地址:https://github.com/zrong/wiz2joplin

Joplin 下载地址:https://joplinapp.org/

md2notion 项目地址:https://github.com/Cobertos/md2notion

# 三、使用 wiz2joplin 导出数据至 Joplin

使用环境

  • Python 版本:>= 3.9
  • wizNote 版本:2.8.7

需要注意

  • 需要取消加密的笔记。

  • 很多笔记在引用图片的时候,使用的是 url 链接,如果一旦 url 链接失效后,这个图片就找不到了。使用本工具转换时,由于没有考虑到这种情况,所以一旦遇到失效的链接,就会报错,需要自行手动处理。

  • 如果遇到「找不到 note 文件」的问题,是因为笔记没有下载至本地导致的,可以在「index.db」为知笔记数据库中,根据 GUID 查找到标题,根据标题搜索,然后将笔记下载至本地。

遇到的问题

  • 网页表格无法转换。因此只能手动添加。
  • 附件无法转换。因此只能手动添加。

# 四、使用 md2notion 导入数据

步骤

  1. 首先,Joplin 导出 Markdown,在 Joplin 菜单中选择「文件」-「全部导出」-「Markdown + 文章前言」,耐心等待至数据导出完毕。

  2. 获取「token_v2」,通过「cookies」-「www.notion.so」-「Cookies」-「token_v2」的 Context 获得。

  3. 自己写了一个脚本,完成文件遍历并执行 md2notion 将 Markdown 文件上传至 Notion。

    from notion.client import NotionClient
    from notion.block import PageBlock
    from md2notion.upload import upload
    import os
    import pandas as pd
    
    # Follow the instructions at https://github.com/jamalex/notion-py#quickstart to setup Notion.py
    client = NotionClient(token_v2="<token_v2>")
    
    # Replace this URL with the URL of the page you want to edit
    page = client.get_block("https://www.notion.so/darinlo/Test-c0d20a71c094")
    
    # You want to upload all the files in the current directory
    upload_dir_path = "/Users/darinlo/Desktop/jo"
    
    
    def read_finish_list_file(path):
        if not os.path.exists(path):
            df = pd.DataFrame(columns=["file_name"])
            df.to_csv(path, index=False)
        else:
            df = pd.read_csv(path)
        return df
    
    
    def upload_md_file(file_path):
        base_name = os.path.basename(file_path)
        file_name = os.path.splitext(base_name)[0]
        with open(file_path, "r", encoding="utf-8") as mdFile:
            newPage = page.children.add_new(PageBlock, title=file_name)
            upload(mdFile, newPage)
    
    
    def traversal_md_files(path):
        for item in os.scandir(path):
            file_extension = os.path.splitext(item.name)[1]
            if item.is_file() and file_extension == ".md":
                df = read_finish_list_file("./finish_list.csv")
                if item.name not in df["file_name"].values:
                    upload_md_file(item.path)
                    df = df.append({'file_name': item.name}, ignore_index=True)
                    df.to_csv("./finish_list.csv", index=False)
            elif item.is_dir():
                traversal_md_files(item.path)
                
    
    traversal_md_files(upload_dir_path)
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47

遇到的问题

  • 导入的格式有点乱,主要是 Markdown 的标准不统一造成的。因此需要手动调整。

# 五、结语

最后唠叨一句,Markdown 主要问题在于:

  1. 对 Table 和 Image 的支持都有限;
  2. 容错率低,一个空格可能都有变化;

本着 Less is more 原则,在当前 Notion 很好解决了我的需求,最终选择了它。

Last Updated: 2022/1/8 04:00:18