Notion导出批量更改脚本

0. 缘起

问就是和Notion分手后的阵痛

导出会有很多乱码,我忍受了一段时间终于忍不了了,掏出学了一点点的python,写了个脚本。该脚本就是检测到当前文件 OR 文件夹名称中含有.,就对它进行相应更改。

## 注意

请确保你已经安装python环境,请先测试下是否满足,脚本运行后不可恢复!

还有一点!md文档中的图片会丢失索引,裂开!我是没多少图片才这么转的!

以下文件名为changeFileName.py

运行命令python changeFileName.py

path为你需要改动的本地地址。

1. 初版-只能改变 1 个文件夹下的内容

import os

# path = r'E:\ECloud\学习之路'
path = r'E:\Temp'
folder_names = os.listdir(path)
mdSuffix = '.md'

for name in folder_names:
    # pic_names = os.listdir(path + '\\' + name)
    isFolder = mdSuffix in name
    old_name = path + '\\' +name
    if isFolder:
        # 先处理文件夹 只取[0]
            # 文件夹下的旧文件名
        # 文件夹下的新文件名
        new_name = old_name.split(mdSuffix)[0]
        print('old_name',old_name,'\nnew_name',new_name)
    else:
        # 文件夹下的新文件名
        new_name = old_name+mdSuffix
        print('old_name',old_name,'\nnew_name',new_name)
        # 如果文件名中不含.md
        # 则是md文件,处理完姓名后需要再拼接回去.md
    os.rename(old_name,new_name)


2. 加强版-调用递归,改变当前文件夹下所有内容

import os

# path = r'E:\ECloud\学习之路\React'
path = r'E:\ECloud\Work'
folder_names = os.listdir(path)

# 获取拼接好的文件地址
def getFileUrl(url,name):
    return url+'\\'+name

# 对文件名的处理
def getFileName(old_name,url):
        # 文件夹下的新文件名
        new_name = old_name.split(' ')[0]+'.md'
        # 如果文件名中不含.md
        # 则是md文件,处理完姓名后需要再拼接回去.md
        notPic = '.png' not in old_name
        # 如果不含空格,则直接退出
        # 注:此处可以增加对Database的判断,我是没用到太多,就手动处理了
        notHaveBlank = ' ' not in old_name
        if notHaveBlank:
            return

        if notPic:
            print('old_name',old_name,'\nnew_name',new_name)
            os.rename(getFileUrl(url,old_name),getFileUrl(url,new_name))

# 是否是文件夹的判断
def isFolder(name):
    return '.' not in name

# 对文件夹的处理
# *重点1:folderFunc函数为递归函数,反复调用自己,深入文件夹
def folderFunc(old_name,url):
    print('old_name',old_name,'\nurl:',url)
    innerNames = os.listdir(getFileUrl(url,old_name))
    originUrl = url
    for innerName in innerNames:
        if isFolder(innerName):
            url = getFileUrl(originUrl,old_name)
            folderFunc(innerName,url)
        else:
            url = getFileUrl(originUrl,old_name)
            getFileName(innerName,url)
    # *重点2:一定要处理无空格的情况,否则会报错
    notHaveBlank = ' ' not in old_name
    if notHaveBlank:
        return

    # 把文件夹命名更改放在最后做
    new_name = old_name.split(' ')[0]
    os.rename(getFileUrl(originUrl,old_name),getFileUrl(originUrl,new_name))

# 运行python后当即进入以下代码
for name in folder_names:
    url = path
    if isFolder(name):
        folderFunc(name,url)
    else:
        getFileName(name,url)

3. 效果

1669886835242

2024年7月3日 更新

之前的没有对已经正确的.md格式转码,昨天学python文件处理的时候又改进了下

import os

# path = r'F:\Temp'
path = r'C:\360Downloads\Temp'
# 这里只能查到当前文件夹下的文件名 需要自行黏贴回去
folder_names = os.listdir(path)
# mdSuffix = '.md'
mdSuffix = '.txt'


# 是否是文件夹的判断
def is_folder(file_name):
    return '.' not in file_name


def is_md(file_name):
    return mdSuffix in file_name


# 如果以空格分割后 当前名称仍然含有尾缀名称 则代表不需要操作
def not_need_do_anything(file_name):
    return mdSuffix in file_name.split(' ')[0]


# 这里要传入当前遍历的路径 深层文件夹
def replace_md_name(n, fp):
    # 只查找拥有.md的文件
    folder = is_folder(n)
    file_is_md = is_md(n)
    not_need_do = not_need_do_anything(n)
    is_need_format = file_is_md and not not_need_do

    if folder:
        # 如果是文件夹,进里面一层查找
        folder_path = fp + '\\' + n
        folder_names_inner = os.listdir(folder_path)

        for name_inner in folder_names_inner:
            replace_md_name(name_inner, folder_path)
    elif is_need_format:
        old_name = fp + '\\' + n
        new_name_key = n.split(' ')[0]

        # 文件夹下的新文件名
        new_name = fp + '\\' + new_name_key + mdSuffix
        print('old_name', old_name, ' ---> new_name', new_name)
        # 如果文件名中不含.md
        # 则是md文件,处理完姓名后需要再拼接回去.md
        os.rename(old_name, new_name)


for name in folder_names:
    replace_md_name(name, path)
posted @ 2022-12-01 17:28  乐盘游  阅读(117)  评论(0编辑  收藏  举报