markdown上传图片时出错,markdown图片上传
前言:
以前,我的笔记工具一直是观念,我没有写博客的习惯。但是第一,因为ideal的服务器在国外,所以有时候不稳定;第二,因为分享观念非常不方便,所以你必须在与他人分享你的笔记并点击链接后才能查看内容。于是我在掘金平台上写了几篇短文,但是掘金的文章无法通过本地Markdown上传直接发表,也无法下载之前上传的文章。导致数据不保存在本地,以后文章迁移到其他平台的成本更高。
后来在哔哩哔哩up的高手TheCW的推荐下学会了使用Linux和vim,然后就喜欢上了不用离开键盘用vim写Markdown的感觉。而且博客园还开放了Metaweblog接口,可以方便地将本地笔记发布到自己的博客园。
灵感来源用vim写笔记不像opinion,可以随时删除不需要的图片,不会在本地留下垃圾文件。(typora没怎么用过,也不知道有没有类似的功能。)删除本地笔记的图片引用后,垃圾图片还是会留在文件夹里。之前的做法是每次删除图片后在文件夹中搜索同名图片,然后删除。这种方法效率低,费时,于是就有了写一个小工具自动清理图片而不需要引用的想法。
基于Python不重复造轮子的原则,我先在国内网上搜了一下(看不懂英文),只看到CSDN上有人用java写了一个类似的工具,但内容不是很懂,也没有现成的工具包下载,只有源代码。(我很懒.)
当然这种小工具在Python里更友好~而我就是从头开始看Python来写这种东西的。可以说我之前对这种语言一无所知,只知道它很流行...............
如何使用# utf-8?因为只有一个文件,所以花一分钟看看源代码就大概知道了。原理极其简单。(一个学了一下午python的人能写出什么复杂的东西)
复制/移动。py文件保存到您喜欢的位置,将路径设置为环境变量path,或者使用到/usr/bin目录的软链接。
由于容量有限,开发时间短,工作目录必须严格遵循以下形式(以后可能会优化)。a.jpg b.png c.png—imgs———————list.md—注. md 。
所有Markdown文件都需要位于当前目录中,而所有图片文件都需要位于。/imgs路径(图片文件夹的名称可以任意,但不一定要叫imgs)。
移动到你要清理未引用图片的上级目录(应该有a.md b.md.imgs/在此目录中)
比如我这里有一个从Notion下载的Vue笔记,但是不小心加了很多其他没用的图片进去,现在想删除。
只有一个Vue-conception . MD和一个文件夹vuedir,里面有图片。
使用
python $ app _ home/img-cleaner . py #原谅我写的这么蠢。这里会提示您输入放置图片的文件夹的名称:
然后按回车。
未引用的图片将被移动到。/_垃圾桶目录。
注意每行点最多包含一个图片标签![](),因为没有关闭常规贪婪匹配,所以如果一行写多张图片,会报错。
2022-6-2更新:引用图片的文件名可以有空格字符,代码会自动将Markdown中引用路径的文件名转码为空格字符,但文件名中只允许出现一个空格字符。源代码接收库
#-*-编码:utf-8 -*-
进口re
导入技能
导入操作系统
#获取工作路径
打印(请输入放图片的文件夹的名称:)
Print(注意,如果路径包含特殊符号,需要用“\”进行转义
_input=input()
#创建替换回收站文件夹
如果os.path.exists(。/replace)==False:
os.mkdir(。/replace’)
打印(“文件夹创建成功:替换”)
否则:
引发异常(“请删除当前目录中的替换文件夹,然后重试”)
如果os.path.exists(./_trash_bin)==False:
os.mkdir( ./_ trash _ bin’)
打印(创建文件夹成功:_ trash _ bin’)
否则:
引发异常(请删除当前目录下的_垃圾桶_垃圾箱文件夹后重试)
# 撰写正则表达式
# pattern=re.compile(\(.*img\/.*\.*\))
#模式=re。编译( \( _ input \/).*\.*\))
pattern=re.compile(\!\[.*\]\( _input \/.*\))
# 创建需要被移动的文件列表
find_list=[]
# 获取当前路径下的。钔文件
md_finder=os.listdir( ./)
md_list=[]
对于md_finder中的项目:
# 寻找减价文件
if item.endswith(.MD’)==True:
md_list.append(项目)
# 逐个读取。钔文件
对于md_list中的md_item:
f=打开(md_item)
md_str=f.read()
f.close()
result=pattern.findall(md_str)
对于范围内的I(len(结果)):
# 将图片路径逐个添加至查找列表
索引=结果[我].查找(])
# 将拿到的原始图片路径加工成/imgs_name /xxx.png的形式
add_item= ./ _ input / result[I][index 3 len(_ input):len(result[I])-1]
space_index=add_item.find( )
# 如果路径中存在空格符
if space_index!=-1:
add _ item=add _ item[0:space _ index] add _ item[space _ index 3:]
# 将图片路径添加至查找列表
查找_列表.追加(添加项目)
# 将所有减价中引用过路径的图片移动至。/替换
对于查找列表中的项目:
shutil.move(item, 1 ./replace’)
打印(项目移动完成)
打印(-)
# 将没有引用的图片移至_垃圾桶_垃圾箱
img _ trashs=os.listdir( ./ _input)
trash_flag=0
对于img _垃圾中的项目_垃圾桶:
item_trash= ./ _input / item_trash
垃圾桶标志=垃圾桶标志一
shutil.move(item_trash,)./_ trash _ bin’)
打印(item_trash in _trash_bin )
打印(-)
# 删除原本的图片文件夹,并更改文件夹名称
os.removedirs( ./ _input /)
os.rename( ./replace ,_input)
print(str(trash_flag)个未引用)
打印(移动成功!没有引用的图片已经移入至_ trash _ bin’)
文章来源:https://www。cnblogs。com/hhsk/p/16338692。超文本标记语言
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。