typora刪除不用圖片
typora
????typora是一款非常好用的文本編輯軟件,拿來(lái)寫代碼或者記筆記非常不錯(cuò)。他的目錄結(jié)構(gòu)我很喜歡,比國(guó)產(chǎn)的軟件好用多了。
????但是他有個(gè)問(wèn)題我不得不吐槽,沒有多端同步很不好用,想在別的地方看下筆記很不方便,而且分享需要導(dǎo)出也很麻煩。然后還有一個(gè)問(wèn)題,今天我解決了。就是刪除文本,圖片不一起刪除的問(wèn)題。
?刪除已經(jīng)不用的圖片思路
?本示例使用python實(shí)現(xiàn)
?1. 遍歷文檔目錄,找出所有圖片,并存入列表
?2. 遍歷所有文檔,使用正則表達(dá)式找出所有正在使用的圖片
?3. 做差,所有圖片減去正在使用的圖片,剩下的就是不用的圖片
?4. 再次遍歷,將不用的圖片刪除
?代碼
import os
import re
import shutil
import win32api
list_img1 = []? # 全部圖片名稱
list_img2 = []? # 使用的圖片名稱
list_img3 = []? # 不用的圖片名稱
path_file = 'D:\APPFILE\\typora'? ?# 圖片和文本的目錄
path_file_back = 'D:\APPFILE\備份'? ?# 圖片和文本的目錄
img_name = "圖片" # 保存圖片的目錄名
pattern0 = r'圖片/(\w+.*\.png)'
pattern1 = r'圖片/(\w+.*\.jpg)'
pattern2 = r'圖片/(\w+.*\.gif)'
pattern3 = r'圖片/(\w+.*\.webp)'
pattern4 = r'圖片/(\w+.*\.jpeg)'
pattern5 = r'圖片\\(\w+.*\.png)'
pattern6 = r'圖片\\(\w+.*\.jpg)'
pattern7 = r'圖片\\(\w+.*\.gif)'
pattern8 = r'圖片\\(\w+.*\.webp)'
pattern9 = r'圖片\\(\w+.*\.jpeg)'
# 找出所有圖片
def get_img(directory):
? ? global list_img1
? ? # 獲取目錄下的所有文件和子目錄
? ? files = os.listdir(directory)
? ? for file in files:
? ? ? ? if file == img_name:
? ? ? ? ? ? filee = os.listdir(os.path.join(directory, file))
? ? ? ? ? ? for i in filee:
? ? ? ? ? ? ? ? list_img1.append(i)
? ? ? ? # 如果是子目錄,則遞歸遍歷
? ? ? ? if os.path.isdir(os.path.join(directory, file)):
? ? ? ? ? ? get_img(os.path.join(directory, file))
# 找出所有正在使用的圖片
def get_file(directory):
? ? global list_img2
? ? # 獲取目錄下的所有文件和子目錄
? ? files = os.listdir(directory)
? ? for file in files:
? ? ? ? # 如果是子目錄,則遞歸遍歷
? ? ? ? if os.path.isdir(os.path.join(directory, file)) and file != img_name:
? ? ? ? ? ? get_file(os.path.join(directory, file))
? ? ? ? ? ? # 如果是文件,則輸出文件名
? ? ? ? elif os.path.isfile(os.path.join(directory, file)):
? ? ? ? ? ? fil = open(os.path.join(directory, file), 'r', encoding='utf-8')
? ? ? ? ? ? text = fil.read()
? ? ? ? ? ? results0 = re.findall(pattern0, text)
? ? ? ? ? ? results1 = re.findall(pattern1, text)
? ? ? ? ? ? results2 = re.findall(pattern2, text)
? ? ? ? ? ? results3 = re.findall(pattern3, text)
? ? ? ? ? ? results4 = re.findall(pattern4, text)
? ? ? ? ? ? results5 = re.findall(pattern5, text)
? ? ? ? ? ? results6 = re.findall(pattern6, text)
? ? ? ? ? ? results7 = re.findall(pattern7, text)
? ? ? ? ? ? results8 = re.findall(pattern8, text)
? ? ? ? ? ? results9 = re.findall(pattern9, text)
? ? ? ? ? ? for i in results0:
? ? ? ? ? ? ? ? list_img2.append(i)
? ? ? ? ? ? for i in results1:
? ? ? ? ? ? ? ? list_img2.append(i)
? ? ? ? ? ? for i in results2:
? ? ? ? ? ? ? ? list_img2.append(i)
? ? ? ? ? ? for i in results3:
? ? ? ? ? ? ? ? list_img2.append(i)
? ? ? ? ? ? for i in results4:
? ? ? ? ? ? ? ? list_img2.append(i)
? ? ? ? ? ? for i in results5:
? ? ? ? ? ? ? ? list_img2.append(i)
? ? ? ? ? ? for i in results6:
? ? ? ? ? ? ? ? list_img2.append(i)
? ? ? ? ? ? for i in results7:
? ? ? ? ? ? ? ? list_img2.append(i)
? ? ? ? ? ? for i in results8:
? ? ? ? ? ? ? ? list_img2.append(i)
? ? ? ? ? ? for i in results9:
? ? ? ? ? ? ? ? list_img2.append(i)
# 找出不用的圖片
def lack_img():
? ? global list_img3
? ? list_img3 = set(list_img1) - set(list_img2)
# 刪除不用的圖片
def rm_img(directory):
? ? # 獲取目錄下的所有文件和子目錄
? ? files = os.listdir(directory)
? ? for file in files:
? ? ? ? if file == img_name:
? ? ? ? ? ? filee = os.listdir(os.path.join(directory, file))
? ? ? ? ? ? set1 = set(filee)
? ? ? ? ? ? set2 = set(list_img3)
? ? ? ? ? ? intersection = set1.intersection(set2)
? ? ? ? ? ? for i in intersection:
? ? ? ? ? ? ? ? try :
? ? ? ? ? ? ? ? ? ? shutil.move(os.path.join(directory, '圖片', i), path_file_back)
? ? ? ? ? ? ? ? except Exception as e:
? ? ? ? ? ? ? ? ? ? print(str(e)+'e')
? ? ? ? # 如果是子目錄,則遞歸遍歷
? ? ? ? if os.path.isdir(os.path.join(directory, file)):
? ? ? ? ? ? rm_img(os.path.join(directory, file))
get_img(path_file)
get_file(path_file)
lack_img()
rm_img(path_file)
print("所有圖片數(shù)量:", len(list_img1))
print("文本使用圖片數(shù)量:",len(list_img2))
print("不使用圖片數(shù)量:",len(list_img3))