본문 바로가기

Dead Code/Python

[파이썬] 확장자별로 폴더 생성, 파일 이동 (2)

소니카메라에서 추출한 파일을 백업하기 위해 바탕화면에 옮기다보면, arw, jpg, mov 파일이 뒤죽박죽 섞여있는데, 일일이 옮기기 귀찮은 경우가 있다. 그래서 과거에 확장자별로 폴더를 이동하는 스크립트를 짠 적이 있는데, 개인적으로 사용하기 위해 약간의 커스터마이징을 진행했다.

 

 

 

[파이썬] 확장자별로 폴더 생성, 파일 이동 (1)

폴더정리 한 폴더 안에 여러 확장자들이 섞여 있을 경우, 확장자별로 폴더를 생성하여, 파일을 이동하는 기능을 예전에, 엑셀VBA로 심심해서 만들어본 적이 있다. [엑셀VBA] 폴더 생성, 확장자별로

sunnybong.tistory.com

 

 

 

룰은, 기본적으로 MOV 폴더에 mp4, mov 등의 동영상 파일이 담기고, RAW파일에 arw 등의 raw 이미지 파일을 넣는다. jpg파일은 root 폴더에 두는 것이 개인적인 룰이다.

 

수정한 코드는 다음과 같다.

 

import os
import tkinter
from tkinter import filedialog

import shutil

# 폴더선택
root = tkinter.Tk()
root.withdraw()
dir_path = filedialog.askdirectory(
    parent=root, initialdir="/", title='Please select a directory')
print("\ndir_path : ", dir_path)


# 폴더내파일검사
global_cache = {}

def cached_listdir(path):
    res = global_cache.get(path)
    if res is None:
        res = os.listdir(path)
        global_cache[path] = res
    return res


def moveFile(ext, str):
    # 현재 파일 위치
    filePath = dir_path + '/' + item        
    # 옮길 파일 위치
    finalPath = dir_path + '/' + str + '/' + item        
   
    if os.path.isfile(filePath):
        shutil.move(filePath, finalPath)
           

if __name__ == '__main__':
   
    # 기본 폴더 생성
    newdir = ["RAW", "MOV"]
    for nd in newdir :
        newtDir = dir_path + '/' + nd
        if not os.path.isdir(newtDir):
            os.mkdir(newtDir)
   

    # 각 기본 폴더에 옮겨질 확장자 리스트 정의
    extList = {"RAW" : ["arw", "nef"],
               "MOV" : ["mov", "mp4"],
               }
     
    for item in cached_listdir(dir_path):
       
        # RAW에 해당하는 확장자인 경우        
        for extItem in extList["RAW"] :
            if item.rpartition(".")[2] == extItem :
                moveFile(extItem, "RAW")

        # MOV에 해당하는 확장자인 경우
        for extItem in extList["MOV"] :
            if item.rpartition(".")[2] == extItem :
                moveFile(extItem, "MOV")

    print("complete")  

 

 

즉흥적으로 만든거라 깊게 생각하지 않아 개발새발이지만, 다음에는 파일명을 생성한 날짜 기준으로 수정하는 스크립트를 추가해보려고 한다.

 

끝.