<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      工具分享:清理 Markdown 中沒有引用的圖片

      前言:
      之前,我寫筆記的工具一直都是 notion,而且沒有寫博客的習(xí)慣。但是一是由于 notion 的服務(wù)器在國外,有時候很不穩(wěn)定;二是由于 notion 的分享很不方便,把筆記分享給別人點開鏈接之后還要先登錄才能查看內(nèi)容。于是我又在 掘金 平臺寫了幾篇隨筆,但是掘金的文章無法通過本地 Markdown 上傳直接發(fā)表,也無法下載之前上傳過的文章,這樣一來數(shù)據(jù)不保存在本地,以后遷移文章到別的平臺的成本也更高。
      后來在 Bilibili up主 TheCW 的推薦下學(xué)會使用了 Linux 和 vim,然后就喜歡上了使用 vimMarkdown 這種雙手不需要離開鍵盤的感覺。而且博客園也開放了 Metaweblog 接口,可以很方便的將本地的筆記發(fā)表到自己的博客園。

      靈感來源

      使用 vim 寫筆記不像 notion 一樣,可以隨時將不需要的圖片刪除而不會在本地留下垃圾文件,(typora 沒怎么用過,不知道有沒有類似的功能)而刪除了本地筆記的圖片引用之后還是會在文件夾留下垃圾圖片殘留,之前的做法是每次刪除完圖片都在文件夾里尋找名字相同的圖片之后刪除,這種方法低效費時,于是便萌生了寫一個自動清理無引用圖片小工具的想法。

      Python

      本著不重復(fù)造輪子的原則,我先在國內(nèi)互聯(lián)網(wǎng)搜尋了一番(看不懂英語),只看到 CSDN 上有人用 java 寫了一個類似的工具,但是內(nèi)容不太看得懂,而且沒有提供現(xiàn)成的工具包下載,只有源碼。(本人比較懶...)
      這種小工具當(dāng)然還是用 Python 更友好啦~ 而且我是為了寫這么一個東西才從頭看的 Python,可以說之前對這門語言一無所知,只知道很火...... 小工具只有一個 .py 文件:

      # utf-8
      

      如何使用

      因為只有一個文件,所以大家花一分鐘看下源碼大概就知道了,原理極其簡單。(一個學(xué)了一下午 python 的人能寫出什么復(fù)雜的東西)

      1. .py 文件 拷貝/移動到自己喜歡的位置,將該路徑設(shè)置為 環(huán)境變量 路徑,或者使用軟鏈接到 /usr/bin 目錄下

      2. 因為能力有限且開發(fā)時間較短,工作目錄必須嚴(yán)格遵循以下形式(未來可能會優(yōu)化)

        .
      ├── imgs
      │   ├── a.jpg
      │   ├── b.png
      │   └── c.png
      ├── list.md
      ├── note.md
      └── time.md
      

      這里的意思是說:所有的 Markdown 文件需要位于當(dāng)前目錄下,而所有的圖片文件需要位于 ./imgs 路徑下 (圖片文件夾的名字可以是任意,不是必須叫 imgs

      1. 移動到你想要清理無引用圖片的上級目錄(該目錄下應(yīng)該有 a.md b.md ...... imgs/
        例如我這里有一個從 Notion 上下載下來的 Vue 筆記,但是我不小心在里面加了許多其他沒用的圖片,現(xiàn)在想刪掉這些圖片

      該目錄下只有一個 Vue-notion.md 和一個放有圖片的文件夾 vuedir

      1. 使用
      python $APP_HOME/img-cleaner.py
      # 原諒我這種愚蠢的寫法
      
      1. 這里會提示需要你輸入放置圖片文件夾的名稱:

      輸入之后按回車

      沒有引用過的圖片就會被移動到 ./_trash_bin 目錄下

      注意點

      • 每行最多包含一個圖片標(biāo)簽 ![]() ,因為沒有關(guān)閉正則的貪婪匹配,如果多個圖片寫在一行的話則會報錯

      • 2022-6-2 更新 :所引用圖片的文件名可以帶 空格符 ,代碼會自動將 Markdown 內(nèi)引用路徑的文件名中的 %20 轉(zhuǎn)碼為 空格符,不過只允許在文件名中出現(xiàn)一次 空格符

      源碼

      Gitee 倉庫

      # -*-coding:utf-8 -*-
      import re
      import shutil
      import os
      
      # 獲取工作路徑
      print("請輸入你放置圖片文件夾的名稱: ")
      print("注意,如果路徑含有特殊符號需要用「\」轉(zhuǎn)義")
      _input = input()
      
      
      
      # 創(chuàng)建 replace _trash_bin文件夾
      if os.path.exists('./replace') == False:
        os.mkdir('./replace')
        print("創(chuàng)建文件夾成功:replace")
      else:
        raise Exception("請刪除當(dāng)前目錄下的 replace 文件夾后重試")
      
      if os.path.exists('./_trash_bin') == False:
        os.mkdir('./_trash_bin')
        print("創(chuàng)建文件夾成功:_trash_bin")
      else:
        raise Exception("請刪除當(dāng)前目錄下的 _trash_bin 文件夾后重試")
      
      # 撰寫正則表達式
      # pattern = re.compile('\(.*img\/.*\..*\)')
      # pattern = re.compile('\(' + _input + '\/.*\..*\)')
      pattern = re.compile('\!\[.*\]\(' + _input + '\/.*\)')
      
      
      # 創(chuàng)建需要被移動的文件列表
      find_list = []
      
      # 獲取當(dāng)前路徑下的 .md 文件
      md_finder = os.listdir('./')
      md_list = []
      for item in md_finder:
        # 尋找 markdown 文件
        if item.endswith('.md') == True:
          md_list.append(item)
      
      # 逐個讀取 .md 文件
      for md_item in md_list:
        f = open(md_item)
        md_str = f.read()
        f.close()
        result = pattern.findall(md_str)
        for i in range(len(result)):
          # 將圖片路徑逐個添加至 find_list
          index = result[i].find("]")
      
          # 將拿到的原始圖片路徑加工成 ./<imgs_name>/xxx.png 的形式
          add_item = "./" + _input + "/" + result[i][index + 3 + len(_input): len(result[i]) - 1]
      
          space_index = add_item.find("%20")
          # 如果路徑中存在 空格符
          if space_index != -1:
            add_item = add_item[0: space_index] + " " + add_item[space_index + 3:]
      
          # 將圖片路徑添加至 find_list
          find_list.append(add_item)
      
      # 將所有 markdown中 引用過路徑的圖片移動至 ./replace
      for item in find_list:
        shutil.move(item, './replace')
        print(item + " 移動完成")
      
      print("----------------------")
      
      # 將沒有引用的圖片移至 _trash_bin
      img_trashs = os.listdir('./' + _input)
      trash_flag = 0
      for item_trash in img_trashs:
        item_trash = "./" + _input + "/" + item_trash
        trash_flag = trash_flag + 1
        shutil.move(item_trash, './_trash_bin')
        print(item_trash + " in _trash_bin")
      
      print("----------------------")
      
      # 刪除原本的 img 文件夾,并更改文件夾名稱
      os.removedirs('./' + _input + '/')
      
      os.rename('./replace', _input)
      
      print(str(trash_flag) + " 個 未引用")
      print("移動成功!沒有引用的圖片已經(jīng)移入至 _trash_bin")
      
      posted @ 2022-06-02 18:03  HuStoking  閱讀(1322)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 91人妻无码成人精品一区91| 精品亚洲欧美无人区乱码| 97人人超碰国产精品最新| 久久综合伊人| 亚洲鸥美日韩精品久久| 亚洲熟妇无码爱v在线观看| 精品国产美女av久久久久| 精品综合一区二区三区四区| 国产精品一区二区三区黄| 亚洲人成电影在线天堂色| 久热这里有精品免费视频| 艳妇乳肉豪妇荡乳xxx| 国产精品国产三级国产专i| 国产精品福利一区二区久久| 亚洲另类激情专区小说婷婷久| 国产精品久久久久aaaa| 综合色综合色综合色综合| 国产老熟女国语免费视频| 92精品国产自产在线观看481页| 东京热加勒比无码少妇| 国产在线视频精品视频| 国产成人午夜福利院| 国产国拍精品av在线观看| 最新偷拍一区二区三区| www夜片内射视频日韩精品成人| 久久精品女人天堂av免费观看| 粉嫩在线一区二区三区视频| 最近中文字幕完整版2019| 日韩在线视频网| 亚洲精品自拍在线视频| 成人性做爰aaa片免费看| 成人国产精品一区二区不卡| 成人做受120秒试看试看视频| 国产精品大片中文字幕| 亚洲a∨无码无在线观看| 国产午夜亚洲精品不卡下载| 99久久久国产精品免费无卡顿| 日韩一区二区三区女优丝袜| 毛片大全真人在线| 始兴县| 蜜桃成人无码区免费视频网站|