Python專案:資料夾內的檔案依照檔案類型分類

Table of Contents

Table of Contents

Development Environment

  • MacOS 11.2
$ python --version
Python 3.9.0

$ pyenv --version
pyenv 1.2.27

Goal

將下面的資料夾中的檔案依照檔案類型重新整理。

files/
  - txt1.txt
  - csv1.csv
  - txt2.txt
  - csv2.csv
  - txt3.txt
  - csv3.csv
  - txt4.txt
  - csv4.csv
  - txt5.txt
  - csv5.csv

期望的整理結果如下所示。

reorganization/
  - txt/
    - txt1.txt
    - txt2.txt
    - txt3.txt
    - txt4.txt
    - txt5.txt
  - csv/
    - csv1.csv
    - csv2.csv
    - csv3.csv
    - csv4.csv
    - csv5.csv

Let's Start

Workflow

  • 建立空的資料夾「reorganization」用來存放整理結果。
  • 使用迴圈處理「files」資料夾中的所有檔案。
  • 在迴圈處理中,抓取檔案的類型,查看使否有該類型的資料夾,若沒有則建立。之後,複製檔案到該類型資料夾中。

Code

import os
import shutil

try:
    path = "./reorganization"
    if not(os.path.isdir(path)):
        os.mkdir(path)
    list = os.listdir("./files")
    for index, value in enumerate(list):
        (name, ext) = os.path.splitext(value)
        type_folder_path = f"{path}/{ext[1:]}"
        if not(os.path.isdir(type_folder_path)):
            os.mkdir(type_folder_path)
        shutil.copyfile(f"./files/{value}", f"{type_folder_path}/{value}")
        
except OSError:
    print (f"Failed" )
else:
    print (f"Success")

Module

  • os: 確認與建立資料夾,讀取資料夾中的檔案列表。
  • shutil: 複製檔案

確認與建立資料夾

使用os.path.isdir()函數來確認資料夾是否存在。

path = "./reorganization"
if not(os.path.isdir(path)):
    os.mkdir(path)

迴圈處理各個檔案

使用os.listdir()來取得資料夾中的檔案列表。

list = os.listdir("./files")
    for index, value in enumerate(list):
        #...

取得檔案類型並複製檔案到目標路徑中

使用os.path.splitext()函數來取得檔案類型。
使用shutil.copyfile()函數來複製檔案到目標路徑。

for index, value in enumerate(list):
    (name, ext) = os.path.splitext(value)
    type_folder_path = f"{path}/{ext[1:]}"
    if not(os.path.isdir(type_folder_path)):
        os.mkdir(type_folder_path)
    shutil.copyfile(f"./files/{value}", f"{type_folder_path}/{value}")

Summary

  • 使用os.path.isdir()函數來確認資料夾是否存在。
  • 使用os.listdir()來取得資料夾中的檔案列表。
  • 使用os.path.splitext()函數來取得檔案類型。
  • 使用shutil.copyfile()函數來複製檔案到目標路徑。