본문 바로가기
파이썬

24. 디렉토리 관리 프로그램 & 과제

by 곽정우 2024. 3. 22.

1. 압축파일 정리하기

 

2. 파일명 정리하기

 

3. 파일명 변경하기

 

4. 파일 분류 및 이동하기

✔  assert

  • 주어진 조건이 True인 확인하고 조건이 False이면 예외를 발생시키는데 사용
  • 주로 디버깅 및 텟트 목적으로 코드에서 사용
  • 디버그 모드에만 동작되며, 배포시에는 작동되지 않음

※ 과제

위 디렉토리 관리 프로그램을 참고하여 자신의 시나리오를 만들고 파일 관련된 프로그램을 작성해 보자.

import os
import glob
import zipfile
import fnmatch
import pathlib
import shutil

target_path = './music_정리전'

zipfile_path = []
for filename in glob.glob(os.path.join(target_path, '**/*.zip'), recursive=True):
    zipfile_path.append(filename)

for filename in zipfile_path:
    with zipfile.ZipFile(filename) as myzip:
        zipinfo = myzip.infolist()
        for info in zipinfo:
            myzip.extract(info, os.path.dirname(filename))

def categoryList(target_path):
    categories = ['Alan Walker', 'Ariana Grande', 'Dua Lipa', 'Jonas Blue']

    category_files = {category: [] for category in categories}

    for root, dirs, files in os.walk(target_path):
        for file in files:
            file_path = os.path.join(root, file)
            for category in categories:
                if fnmatch.fnmatch(file, f'*{category}*'):
                    category_files[category].append(file_path)

    return category_files
result = categoryList(target_path)

categorylist = list(result.keys()) + ['기타']

new_path = './new_정리'

def makeDir(new_path, categorylist):
    for category in categorylist:
        new_dir = pathlib.Path(os.path.join(new_path, category))
        new_dir.mkdir(parents=True, exist_ok=True)

makeDir(new_path, categorylist)

def moveFile(new_path, target_path, categorylist):
    for category in categorylist:
        category_dir = os.path.join(new_path, category)
        for root, dirs, files in os.walk(target_path):
            for file in files:
                if category in file:
                    source_file = os.path.join(root, file)
                    shutil.move(source_file, category_dir)
    
moveFile(new_path, target_path, categorylist)

def move_remaining_files(source_dir, target_dir):

    for file_name in os.listdir(source_dir):
        source_file_path = os.path.join(source_dir, file_name)
        shutil.move(source_file_path, target_dir)

source_directory = "./music_정리전/music"
target_directory = "./new_정리/기타"
move_remaining_files(source_directory, target_directory)

print('정리 완료')

 

프로그램을 실행시키면 

  1. 노래가 있는 압축 파일 해제
  2. 'new_정리' 폴더가 생성
  3. 폴더 안에 사전에 입력한 'Alan Walker', 'Ariana Grande', 'Dua Lipa', 'Jonas Blue' 및 '기타'라는 폴더가 추가 생성
  4. 노래 제목과 폴더명이 동일한 경우 그 폴더로 노래가 이동
  5. 동일하지 않은 경우 기타 폴더로 분류가 되지 않은 노래가 이동
  6. 정리 완료 메세지를 띄우고 프로그램 종료