天天看點

python檔案處理之批量删除檔案夾内特定檔案

這篇是個人生活上遇到的小問題,就是為了之前那篇html和css入門,在網盤找到了udacity的前端課程,大家都知道這是國外的線上授課視訊,結果我興沖沖的打開網盤下載下傳,解壓到同一個檔案夾完就傻眼了。

python檔案處理之批量删除檔案夾内特定檔案

就是解壓的字幕壓縮包裡居然有四個字幕,四個字幕!然後打開我的視訊播放軟體居然每次都自動載入第一個,阿拉伯文,一臉懵逼!我不懂播放軟體也不想懂他選取字幕的原理,手動拿第二個視訊試了下,貌似删除其他三個字幕後,就自動播放中文字幕了。是以要是我每個視訊都删除前三個,留下中文字幕貌似就解決這問題了,可是有九十多個視訊呢,手動删怕是要崩潰。他們不是說隻要是重複的操作,python都能替代,那我就網上開始找資料了呗,這次要處理的檔案名也不複雜,都有規律。由于在網上找了個删除檔案的源碼,先試下各個函數的意思。

import os   #python操作目錄的庫
path = '/Users/herenyi/Downloads/HTML 和 CSS 入門 Videos/4 - 頁面結構 - lang_ar_vs1.srt'
#我的檔案位置
os.path.splitext(path) #看下splitext函數什麼功能
os.path.split(path) #看下split函數什麼功能
           
python檔案處理之批量删除檔案夾内特定檔案

split分隔出路徑和檔案名,solit分隔出字尾和字尾之前的兩子產品。

os.path.basename(path)  #看下basename函數什麼功能
os.remove(path) #這是删除檔案函數
           
python檔案處理之批量删除檔案夾内特定檔案

basename是取回檔案名的操作,remove是傳入檔案名删除的操作,由于我沒在檔案目錄下運作,都在anaconda上運作,是以需要在檔案名之前加上傳入路徑,本來傳入檔案名就行。接下來就開始實戰了。

import os

#擷取目錄下的要删除檔案
def get_file(file_dir):
    lists=[]
    for root, dirs, files in os.walk(file_dir):
        for file in files:
            if (os.path.splitext(file)[1] == '.srt' and
                os.path.split(file)[1].find('zh-cn') == -1): 
                 #再那位仁兄的基礎上加入這一句邏輯判斷,首先篩選出srt字尾
                 再選出不包含中文字幕的檔案,也就是剩下所有字幕。
                lists.append(os.path.basename(file))
    print ('檔案名擷取成功')
    return lists

#批量删除檔案
def removeFile():
    lists = get_file(path)
    for index in range(len(lists)):
        os.remove('/Users/herenyi/Downloads/HTML 和 CSS 入門 Videos/'+ lists[index])
    print ('檔案删除成功')
    
path = '/Users/herenyi/Downloads/HTML 和 CSS 入門 Videos'
removeFile()
           
python檔案處理之批量删除檔案夾内特定檔案

大功告成,是不是很清爽,雖然是個小嘗試,可能在大牛面前見笑了,可是之前一直都是撸網上項目,這次終于解決了自己實際的問題,還是很有成就感的,哈哈。

繼續閱讀