经过
2021-07-19,大雨。
今天突发奇想,打算把自己电脑上的Markdown
笔记上传到CSDN
博客上。
第一次尝试
先尝试了导入
功能:
导入后:
呃。。。难道图片相对路径不行?
第二次尝试
尝试写了个Python
脚本把Markdown
中的图片路径改成绝对路径:
import os
import re
import base64
NOW_PATH_DIR = 'E:\\work\\notes\\test'
def s_dir(path: str) -> None:
'''搜索md文件'''
global NOW_PATH_DIR
NOW_PATH_DIR = path
file_list = []
dir_list = []
for p in os.listdir(path):
p = os.path.join(path, p)
if os.path.isdir(p):
dir_list.append(p)
elif os.path.isfile(p) and p.endswith('.md'):
file_list.append(p)
# 先处理file,再处理dir
for p in file_list:
with open(p, 'r+', encoding='UTF-8') as f:
t = f.read()
t = change(t)
f.seek(0)
f.write(t)
for p in dir_list:
s_dir(p)
def img_absolute_process(repl: re.Match) -> str:
'''处理图片引用,改为绝对路径'''
s = repl.group()
img_path = repl.group(1)
absolute_path = os.path.join(NOW_PATH_DIR, img_path)
return s.replace(img_path, absolute_path)
def cpp_process(repl: re.Match) -> str:
'''适配cpp,CSDN不认识c++,只认识cpp'''
s = repl.group()
s = s.replace('```c++', '```cpp')
return s
def change(md: str) -> str:
'''格式化以适应csdn'''
md = re.sub(r'!\[.*?\]\((.*?)\)\s+', img_absolute_process, md, flags=re.M | re.S)
md = re.sub(r'```c\+\+.*?```', cpp_process, md, flags=re.M | re.S)
return md
if __name__ == '__main__':
s_dir(NOW_PATH_DIR)
呃。。。。。。还是不行。
第三次尝试
通过百度
查到,Markdown
中可以嵌入base64
的图片。于是乎我又写了个脚本来适配CSDN
:
import os
import re
import base64
NOW_PATH_DIR = 'E:\\work\\notes\\test'
IMG_NUM = 0
def s_dir(path: str) -> None:
'''搜索md文件'''
global NOW_PATH_DIR
NOW_PATH_DIR = path
file_list = []
dir_list = []
for p in os.listdir(path):
p = os.path.join(path, p)
if os.path.isdir(p):
dir_list.append(p)
elif os.path.isfile(p) and p.endswith('.md'):
file_list.append(p)
# 先处理file,再处理dir
for p in file_list:
with open(p, 'r+', encoding='UTF-8') as f:
t = f.read()
t = change(t)
f.seek(0)
f.write(t)
for p in dir_list:
s_dir(p)
def img_base64_process(repl: re.Match) -> str:
'''处理图片引用,改成base64格式'''
global IMG_NUM
IMG_NUM += 1
s = repl.group()
img_path = repl.group(1)
absolute_path = os.path.join(NOW_PATH_DIR, img_path)
with open(absolute_path, 'rb') as f:
image = f.read()
img_base64 = base64.b64encode(image).decode('utf-8')
if absolute_path.endswith('.png'):
img_base64 = 'data:image/png;base64,' + img_base64
elif absolute_path.endswith(('.jpg', '.jpeg')):
img_base64 = 'data:image/jpeg;base64,' + img_base64
else:
img_base64 = f"data:image/{os.path.split(absolute_path)[-1].split('.')[-1]};base64," + img_base64
return s.replace(f'({img_path})', f'[Img-{IMG_NUM}]') + '\n' + f'[Img-{IMG_NUM}]:' + img_base64 + '\n'
def img_absolute_process(repl: re.Match) -> str:
'''处理图片引用,改成绝对路径'''
s = repl.group()
img_path = repl.group(1)
absolute_path = os.path.join(NOW_PATH_DIR, img_path)
return s.replace(img_path, absolute_path)
def cpp_process(repl: re.Match) -> str:
'''适配cpp'''
s = repl.group()
s = s.replace('```c++', '```cpp')
return s
def change(md: str) -> str:
'''格式化以适应csdn'''
md = re.sub(r'\!\[[^\[\]]*?\]\((.*?)\)\s+', img_base64_process, md, flags=re.M | re.S)
md = re.sub(r'```c\+\+.*?```', cpp_process, md, flags=re.M | re.S)
return md
if __name__ == '__main__':
s_dir(NOW_PATH_DIR)
print(IMG_NUM)
再次尝试上传:
我的图咋只显示了一半??
我猜测是没有导入完全,文章超过多少个字符就直接砍掉了。
第四次尝试
这次我试着直接把处理成base64
字符串的Markdown
直接通过Ctrl+C
Ctrl+V
复制到编辑器中:
好像。。。没什么区别。
估计是文章有字数限制。
写在最后
最终我放弃了,就祝愿CSDN
越做越好吧。
听说Github
+WordPress
挺香的。