Mathematica將待整理圖片重命名為生詞

Mma使用生詞本重命名待整理圖片文件夾


Background


周末在整理圖片文件夾,特別亂的那種。

發現一張一張圖片鑒定一下,再放到不同的文件夾下是比較費時間的,特別在有目錄層級的移動操作時。

想起來寫過這樣一個腳本功能,給所有圖片文件起個名字,以後慢慢分類的時候,順便可以複習單詞,顯得不那麼浪費時間呢?

幾年沒背單詞,辭彙量退化~~~大家有沒有使用上一篇講到的生詞本摘錄功能呢

本文的功能是:把一個圖片文件夾中的圖片使用你的生詞本中的生詞重命名。

如此一邊整理圖片文件夾,一邊複習單詞,速度慢也沒關係。

圖片文件夾選擇


files = FileNames[{"*.jpg", "*.png"(*"*.gif"*)}, "G:\堅果雲\Wolfram Mathematica\Pictures", [Infinity]];

Hash刪重


這裡在做的是把重複圖片刪除。

注意這裡每個人的情況不一樣,記得人肉查看下下面變數asso的輸出結果。如果發現asso的結果有些複雜,可能因為你的文件夾中圖片的情況比較複雜。

在有不確定的情況下,也可以回頭在上一步限制一下部分文件夾,即過濾有的文件夾,或人肉跳到文件夾[Windows資源管理器]去操作一下。

asso = GroupBy[files, FileHash];assoToDelete = Select[asso, Length@# > 1 &]

<||>

DeleteFile /@ Flatten[Values@assoToDelete[[All, 2 ;; -1]]];

有的冗餘[FileHash相同的情況]是刻意的,比如一張圖片在多個文件夾是你自己決定的合理的情況。

有的圖片文件名是因為以前整理合併多個圖片文件夾的情況下或其他操作搞出[圖片.png]、[圖片(2).png]、[圖片-副本.png]等。

有的圖片文件名是有重要信息的,因此統一把圖片文件名修改了有些負作用,比如[解決XX的一個問題],如果圖片內容里沒有相關信息,後面查看此圖片時你可能會想不起來為什麼要保留此圖片,此種情況可以加個過濾函數[正常文件名Q]。

有的圖片文件名是[1231231313.jpg]這種,重命名完全沒問題。

兩個圖片內容完全相同時,FileHash也可能不同,可以加個pHash功能,GroupBy操作基於輸入圖像內容。

輸入生詞本


wordList = Import["WordList-337@2017-11-02.txt", "Data"][[All, 1]];length = Length@files;words = RandomSample[Select[wordList // Union, DictionaryWordQ], length];

輸入所有圖片,Import可以幫助你檢測圖片是否有損壞,因為我個人經歷過各種重裝系統換硬碟什麼的,格式化後做數據恢復,經常會有一些損壞的圖片,所以這裡提到一下。

filesImport = Import /@ files;i = 1;FileNameJoin[{DirectoryName@files[[i]], words[[i]] <> ".png"}]

G:堅果雲Wolfram MathematicaPictures報錯信息denounce.png

輸出圖片

DeleteFile /@ files;

這個操作前,記得備份,比如MathematicaFrontEnd抽筋報錯關閉——!圖片在回收站是沒有的。

Do[fileExport = FileNameJoin[{DirectoryName@files[[i]], words[[i]] <> ".png"}]; Export[fileExport, filesImport[[i]]];, {i, length}]

Rename圖片

Rename圖片不用把原圖片刪除

其他


注意備份——!圖片沒了不許怪我。

我嘗試了一些軟體,Mac-IOS自帶的照片app有一個好處是在查看圖片時,右鍵可以添加到某一個相冊,這個功能比較方便。但是!導入一個嵌套文件夾的圖片時不能保留原子文件夾這個信息,即所有子文件夾會Flatten展平合併到一個文件夾,可惜可惜。

Mac下Finder中一種多列模式,最右邊是一張圖片,拖動到不同層級的目錄相對還算方便。

特別地,我總是許多[新建文件夾]下圖片未分類的最多。。。比如在Windows資源管理器中操作時,要移動一張圖片到上級目錄的其他文件夾下時,雖然面板里有[移動到]按鍵,但是文件夾操作的歷史紀錄保留太多,用起來也並不太高效。

我突然想起來以前寫過一個Tag標記圖片的相關功能。。。Mma可以做到這樣:就是把圖片的所有相關目錄做為一個按鈕List,然後你查看一張圖片時,點一下目錄按鈕,然後此圖片就移動到這個目錄中去了,這樣整體按鍵操作就是快了,視圖上的效果跟上面提到的Mac下Finder中的功能一樣。扯遠了,,,我去研究下這個問題,整理個腳本後續我更新一下,也許又可以寫一篇文章~~~

~~~文章有點短來著,並沒有太多技術,但是重點是這個事情是非常有意義的,Mma粉絲們可以玩起來,歡迎大家分享各種實用的小腳本小功能輔助學習與生活。

本文整理方式並不一定是圖片文件夾,只不過其他文件一般都有有意義的名字,比如[什麼什麼書],[什麼什麼文章],重命名掉影響檢索就不好了。

有些小腳本功能我慢慢整理到Github倉庫

感謝LePtC等編輯的建議~~~

Update


FileHash的問題

i1=Import@(f1="flush.png");i2=Import@(f2="flush1.png");i3=Import@(f3="frown.png");ImageDistance[i1,i2]0.ImageDistance[i1,i3]0.FileHash/@{f1,f2,f3}{144433892063582813226510139812875745420,144433892063582813226510139812875745420,258302515394409855761221291964301426077}

filesContent=Thread[files->(ImageData/@filesImport)];asso=Association[MapIndexed[Rule[First@#2,#1]&,Values@GroupBy[filesContent,Last->First]]];

推薦閱讀:

背英語單詞比較不錯的APP
墨墨前進365天
如何背誦牛津高階詞典
TOEFL單詞表背不完怎麼破?

TAG:WolframMathematica | 背單詞 |