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. 效果
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)
人生到处知何似,应似飞鸿踏雪泥。