iT邦幫忙

4

python批量讀取資料夾檔案、修改檔案

python中有好用的os模組,
可以幫助我們大量將資料夾中的檔案印出來,
亦可幫助我們大量修改檔名。

動機說明

之前在(2020年1月最新)如何用python下載youtube影片?中教過如何用python將youtube影片下載為mp4檔案,
為了方便整理檔案,
我們可能會想要按順序為檔案編號,
或是將資料夾底下的所有檔案名稱印出來,
方便製作音樂清單的目錄。

使用教學

匯入os模組

欲使用python的os模組,需加入這行程式碼:

import os

一、批量修改檔名

# 函數功能: 在指定path路徑下,將該層檔案及資料夾名稱前加上prefix字串
def batch_rename(path, prefix):
    for fname in os.listdir(path):
        new_fname = prefix+fname
        os.rename(os.path.join(path, fname), os.path.join(path, new_fname))

二、批量顯示檔名

# 函數功能: 顯示指定路徑下,該層的檔案及資料夾名稱
def batch_showname(path):
    for fname in os.listdir(path):
        print(os.path.join(path, fname))

三、遞迴顯示所有檔名

# 函數功能: 遞迴顯示指定路徑下的所有檔案及資料夾名稱
def find_dir(path):
    for fd in os.listdir(path):
        full_path=os.path.join(path,fd)
        if os.path.isdir(full_path):
            print('資料夾:',full_path)
            find_dir(full_path)
        else:
            print('檔案:',full_path)

使用範例

假設我將python程式命名為renameFileName.py
並在同一個資料夾放入之前載好的歌曲,如圖示:

https://ithelp.ithome.com.tw/upload/images/20200123/20117114xLnGtxWTLn.png

我將歌曲(.mp4)檔存分別存放在資料夾「歌單1」、「歌單2」、「歌單3」中,
則我可以用底下的程式查看現在這個資料夾底下的所有檔案:

import os
def find_dir(path):
    # 函數功能: 遞迴顯示指定路徑下的所有檔案及資料夾名稱
    for fd in os.listdir(path):
        full_path=os.path.join(path,fd)
        if os.path.isdir(full_path):
            print('資料夾:',full_path)
            find_dir(full_path)
        else:
            print('檔案:',full_path)
            
path="./" #指向當前資料夾的路徑
find_dir(path)

假設我們想把歌單1的檔名前全部加上a
把歌單2的檔名前全部加上b
把歌單3的檔名前全部加上c
(方便之後將檔案放在同一個資料夾做排序)
則我們可以這樣寫:

import os
def batch_rename(path, prefix):
    # 函數功能: 在指定path路徑下,將該層檔案及資料夾名稱前加上prefix字串
    for fname in os.listdir(path):
        new_fname = prefix+fname
        os.rename(os.path.join(path, fname), os.path.join(path, new_fname))

batch_rename("./歌單1",'a')
batch_rename("./歌單2",'b')
batch_rename("./歌單3",'c')

附上完整程式碼供參考

程式碼可依自身使用需求做修改,
並且因程式能夠大量修改檔案,
稍有不慎會不小心將電腦檔案改壞,
路徑需小心設定。

import os
def batch_rename(path, prefix):
    # 函數功能: 在指定path路徑下,將該層檔案及資料夾名稱前加上prefix字串
    for fname in os.listdir(path):
        new_fname = prefix+fname
        os.rename(os.path.join(path, fname), os.path.join(path, new_fname))     
        
def batch_showname(path):
    # 函數功能: 顯示指定路徑下,該層的檔案及資料夾名稱
    for fname in os.listdir(path):
        print(os.path.join(path, fname))
        
def find_dir(path):
    # 函數功能: 遞迴顯示指定路徑下的所有檔案及資料夾名稱
    for fd in os.listdir(path):
        full_path=os.path.join(path,fd)
        if os.path.isdir(full_path):
            print('資料夾:',full_path)
            find_dir(full_path)
        else:
            print('檔案:',full_path)
            
path="./" #指向當前資料夾的路徑
find_dir(path)

參考資料

  1. 菜鳥教程- Python OS 文件/目錄方法
  2. Python OS及檔案處理使用筆記
  3. [Python]os.rename()修改檔案檔名

尚未有邦友留言

立即登入留言