2018年3月25日 星期日

批次刪除特定模式檔名

之前外接硬碟固障, 因此將許多檔案移到NAS並同步到雲端, 多了一份保障, 但還是沒有外接硬碟方便,後來買了外接硬碟, 從NAS將音樂檔案抓回, 不知是否同步雲端的問題, 多了許多 ._ 開頭的檔案, 雖不影響檔案的備份還原, 但一來多占了不少空間, 二來我用 MusicBee建立音樂庫時會抓到這些無法播放的檔案# MusicBee 免費音樂庫管理軟體一開始是進去資料夾慢慢做刪除, 但實在是太多了, 還是寫個程式來處理吧:
# coding=UTF-8
import os
import re
import shutil


def utoa(unistr):
    return unistr.encode('utf-8')


def atou(anistr):
    return anistr.decode('utf-8')


pattern = re.compile(r'^\._')
cnt = 0

for root, dirs, files in os.walk(atou("W:\\3_WSPop\\")):
    for f in files:
        if pattern.match(f):
            cnt = cnt + 1
            print os.path.join(root, f)
            try:
                shutil.move(os.path.join(root, f), 'W:\\Dummy')
            except:
                try:
                    shutil.move(os.path.join(root, f),
                                "W:\\Dummy\\" + f + str(cnt))
                except:
                    pass
print cnt

python有os.walk的方式, 可以很容易掃目錄, 透過re正則表達式. 找出此類檔案, 再透過shutil.move搬出來以python很容易就可以處理這個問題, 好險透過程式處理, 否則以西洋音樂就1萬多筆, 手動刪真的是很慢又吃力.回頭想到, 等小孩長大點, 原本預計教他scratch, 之後教他 python, 讓他接觸程式設計, 不希望他未來靠這個糊口, 但會寫程式不管做什麼都有幫助, 比如我現在碰到這個小狀況, 會寫程式, 咖啡還沒泡好就處理好了.但以python的特性, 似乎不太適合入門打底, 因為太多寫好可用的函式, 很容易上手, 容易勾起興趣, 但沒那麼容易瞭解背後的資料架構, 若要打底, 似乎由go(可以說是新一代的c語言)開始比較好, 不過還有好幾年可準備, 再來慢慢想一想.

沒有留言:

張貼留言