Code Note

폴더 내 파일 트리 & 서브 폴더 내 파일들을 하나의 폴더로 이동

Woomii 2023. 10. 30. 15:20
728x90
반응형

오늘은 윈도우 환경에서 나눔 글꼴을 설치하려다 불편함을 느껴서 찾아본 여러 폴더 안에 있는 파일들을 하나의 폴더로 합치는 파이썬 코드를 정리해 보았습니다.
 
https://hangeul.naver.com/font

네이버 글꼴 모음

네이버가 만든 150여종의 글꼴을 한번에 만나보세요

hangeul.naver.com

이 사이트에서 나눔 글꼴을 설치하려다 보니 하나의 압축 파일에 윈도우용 폰트(ttf)와 맥용 폰트(otf)가 함께 있더라구요.
그리고 한번에 모든 파일을 설치하려면 각 폰트 별 폴더를 찾아가고, 폴더 안에서 ttf 폴더를 눌러야하는 불편함이 있었어요.
 

 

필요(불편?)은 발명의 어머니

그래서 방법을 찾아 보았습니다!
우선은 폴더 내 하위 폴더를 포함한 파일들 리스트를 보고, 각 폴더 내에서 ttf 확장자를 가진 파일들을 하나의 폴더로 이동하기 위한 스크립트는 다음과 같습니다.

 
 

작업하고자 하는 폴더
#%% 1. 파일 트리 프린트
import os

def print_file_tree(root_dir):
    for root, dirs, files in os.walk(root_dir):
        level = root.replace(root_dir, '').count(os.sep)
        indent = '  ' * (level)
        print('{}{}/'.format(indent, os.path.basename(root)))
        subindent = '  ' * (level + 1)
        for file in files:
            print('{}{}'.format(subindent, file))
#%%
root_directory = "D:/nanumfont/"
print_file_tree(root_directory)

#%% 2. 서브폴더 내 특정 확장자 파일 이동
import shutil
import os

def cut_and_paste_files(source_directory, destination_directory):
    for root, dirs, files in os.walk(source_directory):
        for file in files:
            print(file)
            source_file = os.path.join(root, file)
            destination_file = os.path.join(destination_directory, file)
            if file[-3:] =='ttf': ## 해당 파일의 확장자가 ttf에 해당할 경우만 이동
                shutil.move(source_file, destination_file)

#%%
# Define source and destination directories
source_directory = "D:/nanumfont/"
destination_directory = "D:/nanumfont/"

# Call the function to cut and paste files
cut_and_paste_files(source_directory, destination_directory)

 

1. 파일 트리 프린트

먼저, 작업하고자 하는 폴더의 구조를 확인하기 위해 파일 트리를 출력해보았습니다.
폴더를 보면 

 
 

2. 서브 폴더 내 특정 확장자 파일 이동

 

반응형