장기간에 걸친 오랜 시간 동안 컴퓨터로 작업을 하면, 폴더가 지저분해 집니다. 폴더 속 폴더와 파일들이 복잡하고 지저분하게 생성되어 있는 경우가 매우 많습니다. 특정 폴더 안에 있는 파일들을 파일 확장자 기준으로 깔끔하게 정리하여 폴더에 저장해 두면 좋겠다는 생각이 들 때가 많이 있습니다. 이번 포스팅에서는 파이썬 프로그램을 활용하여 폴더 및 파일 정리 파이썬 함수 코드를 작성해 보겠습니다. 해당 함수는 파이썬 프로그램이 설치되어 있는 컴퓨터라면 누구나 활용할 수 있습니다.
폴더 안의 파일을 정리하는 파이썬 함수
최종 파이썬 스크립트
아래 함수는 폴더 안의 파일을 정리하는 함수를 나타내는 파이썬 스크립트입니다.
import os
from shutil import move
def sort_files(directoryPath):
for filename in os.listdir(directoryPath):
if os.path.isfile(os.path.join(directoryPath, filename)):
fileExtension = filename.split('.')[-1]
destinationDirectory = os.path.join(directoryPath, fileExtension)
if not os.path.exists(destinationDirectory):
os.makedirs(destinationDirectory)
move(os.path.join(directoryPath, filename), os.path.join(destinationDirectory, filename))
함수 실행 결과
아래는 “D:\zzinnam\02. 아이콘” 경로에 있는 파일들을 파일확장자명에 해당하는 폴더를 생성하여 정렬하는 파이썬 스크립트입니다.
sort_files(r'D:/zzinnam/02. 아이콘')
위의 코드를 실행하면, 아래와 같이 특정 디렉토리가 깔끔하게 정리된 것을 확인하실 수 있습니다.
함수 코드에 대한 상세 설명
import os
os 모듈에서 제공하는 함수를 사용하기 위해 os 모듈을 로딩하는 코드입니다. os 모듈은 운영체제에서 제공하는 여러 기능을 파이썬에서 수행할 수 있게 해주는 모듈입니다.
from shutil import move
shutil 모듈에서 제공하는 함수 중 move 함수를 사용하기 위해 shutil 모듈 안에 있는 여러 함수 중 move 함수만 로딩하는 코드입니다. shutil 모듈은 파일과 폴더를 이동하거나 복사할 때 사용하는 모듈입니다. 이동할 때는 move함수를 사용하고, 복사할 때는 copy 함수를 사용합니다.
def sort_files(directoryPath):
인수를 1개(directoryPath) 받는 sort_files 함수를 생성합니다.
for filename in os.listdir(directoryPath):
os.listdir(directoryPath)는 directoryPath 경로에 있는 모든 폴더명과 파일명을 리스트로 반환합니다.
# 'D:/zzinnam/02. 아이콘' 경로에 있는 파일명을 리스트로 반환
directoryPath = r'D:/zzinnam/02. 아이콘'
os.listdir(directoryPath )
--------------------------------------
['accident.png',
'accident.svg',
'alcohol.png',
'alcohol.svg',
'barchart.png',
'barchart.svg',
'chart.png',
'chart.svg',
'clock.png',
'clock.svg',
'cloud.png',
'cloud.svg',
'covid19.png',
'covid19.svg',
'Decision.png',
'Decision.svg',
'drone.png',
'drone.svg',
'firworks.png',
'firworks.svg',
'gear.png',
'gear.svg',
'in out.png',
'in-out.svg',
'mail.png',
'mail.svg',
'map.png',
'map.svg',
'soccer.png',
'soccer.svg',
'star.png',
'star.svg',
'thinking.png',
'thinking.svg',
'violence.png',
'violence.svg',
'WORK-AND-LIFE-BALANCE.png',
'WORK-AND-LIFE-BALANCE.svg']
따라서, for filename in os.listdir(directoryPath): 는
filename에 ‘accident.png’ 값부터 ‘WORK-AND-LIFE-BALANCE.svg’ 값까지 하나씩 입력(대입)하면서 이후 코드를 반복하는 for 명령문을 의미합니다.
if os.path.isfile(os.path.join(directoryPath, filename)):
if 조건문에 os.path.isfile 함수와 os.path.join 함수가 포함되어 있습니다.
os.path.join은 경로와 파일명을 결합할 때 사용하는 함수입니다.
directoryPath = r'D:/zzinnam/02. 아이콘'
filename = 'accident.png'
os.path.join(directoryPath, filename)
----------------------------------------
'D:/zzinnam/02. 아이콘\\accident.png'
os.path.isfile은 경로에 파일의 존재여부(True/False)를 반환하는 함수입니다.
os.path.isfile('D:/zzinnam/02. 아이콘\\accident.png')
------------------------------------------------------
True
위의 예시는 os.path.isfile(os.path.join(directoryPath, filename))의 결과 Tue 값을 반환하여
if os.path.isfile(os.path.join(directoryPath, filename)) 아래 명령문을 수행하게 됩니다.
fileExtension = filename.split(‘.’)[-1]
filename에 저장되어 있는 파일명을 dot(‘.’) 기준으로 분리하여 가장 왼쪽에 있는 값을 반환합니다.
filename = 'accident.png'
fileExtension = filename.split('.')[-1]
fileExtension
-----------------------------------------
'png'
destinationDirectory = os.path.join(directoryPath, fileExtension)
directoryPath에 저장되어 있는 파일경로명과 fileExtension에 저장되어 있는 파일명을 결합하여 destinationDirectory 에 저장합니다.
directoryPath = r'D:/zzinnam/02. 아이콘'
# fileExtension 저장값은 위의 코드에서 생성된 fileExtension 을 그대로 사용
# fileExtension에는 'png' 값이 저장되어 있음
destinationDirectory = os.path.join(directoryPath, fileExtension)
destinationDirectory
--------------------------------------------------------------------------
'D:/zzinnam/02. 아이콘\\png'
if not os.path.exists(destinationDirectory) :
os.path.exists(destinationDirectory)는 destinationDirectory에 저장된 경로명이 존재여부를 확인하는 함수입니다.
os.path.exists(destinationDirectory)
--------------------------------------
False
‘D:/zzinnam/02. 아이콘\\png’ 경로명이 존재하지 않아 False를 반환하였습니다.
따라서 if not os.path.exists(destinationDirectory) : 의 의미는 ‘D:/zzinnam/02. 아이콘\\png’ 경로명이 존재하지 않는다면, 아래 명령문을 수행하라는 의미입니다.
os.makedirs(destinationDirectory)
os.makedirs(destinationDirectory)는 destinationDirectory의 경로명을 생성하라는 의미입니다.
# 아래 코드를 수행하면, 'D:/zzinnam/02. 아이콘\\png' 가 생성됨
os.makedirs(destinationDirectory)
move(os.path.join(directoryPath, filename), os.path.join(destinationDirectory, filename))
move(인수1, 인수2)함수는 인수1을 인수2로 이동시키는 함수입니다. 스크립트 설명 아래의 모든 코드를 순서대로 작성하셨다면, 아래 코드를 실행하시면 ‘D:/zzinnam/02. 아이콘’ 폴더에 있는 ‘accident.png’ 파일이 ‘D:/zzinnam/02. 아이콘/png’ 폴더로 이동한 것을 확인하실 수 있습니다.
move(os.path.join(directoryPath, filename), os.path.join(destinationDirectory, filename))
이번 포스팅에서는 파이썬 프로그램을 활용하여 폴더안에 있는 파일들을 정리하는 함수를 작성해 보았습니다. 간단한 프로그램으로 컴퓨 터 속 파일들을 정리해 보시는 건 어떨까요?
감사합니다!