필요한 파이썬 패키지 설치하기
이 스크립트는 파이썬의 표준 라이브러리인 os, shutil, tkinter를 사용합니다. tkinter는 일부 시스템에서 기본적으로 설치되어 있지 않을 수 있으므로, 다음과 같이 설치할 수 있습니다.
pip install tk
코드 분석 및 설명
라이브러리 불러오기
# 필요한 라이브러리를 불러옵니다.
import os
import shutil
import tkinter as tk
from tkinter import filedialog
파일 선택 및 복사 함수
# 파일을 선택하고 복사하는 함수입니다.
def select_and_copy_files():
source_dir = os.path.join(source_base_dir_entry.get(), source_folder_name_entry.get())
target_dir = os.path.join(target_base_dir_entry.get(), target_folder_name_entry.get())
start_num = int(start_num_entry.get())
end_num = int(end_num_entry.get())
for filename in os.listdir(source_dir):
file_base, file_ext = os.path.splitext(filename)
file_num_str = ''.join(filter(str.isdigit, file_base))
if file_num_str.isdigit() and start_num <= int(file_num_str) <= end_num:
source_file_path = os.path.join(source_dir, filename)
target_file_path = os.path.join(target_dir, filename)
shutil.copy2(source_file_path, target_file_path)
result_label.config(text="모든 복사를 완료했습니다.")
사용자 인터페이스 구성
이 부분에서는 tkinter를 사용하여 각종 입력 필드, 버튼, 레이블을 설정하고, 그리드 형태로 화면에 배치합니다. 사용자는 이 인터페이스를 통해 원하는 작업을 쉽게 설정할 수 있습니다.
전체 코드
# 필요한 라이브러리를 임포트합니다.
import os
import shutil
import tkinter as tk
from tkinter import filedialog
# 파일을 선택하고 복사하는 함수입니다.
def select_and_copy_files():
# 사용자가 입력한 디렉토리 경로와 폴더 이름을 결합하여 전체 경로를 구성합니다.
source_dir = os.path.join(source_base_dir_entry.get(), source_folder_name_entry.get())
target_dir = os.path.join(target_base_dir_entry.get(), target_folder_name_entry.get())
# 사용자로부터 입력받은 시작 번호와 끝 번호를 정수로 변환합니다.
start_num = int(start_num_entry.get())
end_num = int(end_num_entry.get())
# 원본 디렉토리의 파일들을 순회합니다.
for filename in os.listdir(source_dir):
# 파일 이름에서 확장자를 분리합니다.
file_base, file_ext = os.path.splitext(filename)
# 파일 이름에서 숫자 부분만 추출합니다.
file_num_str = ''.join(filter(str.isdigit, file_base))
# 추출된 숫자가 지정된 범위 내에 있는지 확인합니다.
if file_num_str.isdigit() and start_num <= int(file_num_str) <= end_num:
# 원본과 대상 파일의 전체 경로를 구성합니다.
source_file_path = os.path.join(source_dir, filename)
target_file_path = os.path.join(target_dir, filename)
# 파일을 복사합니다.
shutil.copy2(source_file_path, target_file_path)
# 결과를 사용자에게 알립니다.
result_label.config(text=f"모든 복사를 완료했습니다.")
# 원본 디렉토리를 탐색하고 선택하는 함수입니다.
def browse_source_dir():
source_base_dir_entry.delete(0, tk.END)
source_base_dir_entry.insert(0, filedialog.askdirectory())
# 대상 디렉토리를 탐색하고 선택하는 함수입니다.
def browse_target_dir():
target_base_dir_entry.delete(0, tk.END)
target_base_dir_entry.insert(0, filedialog.askdirectory())
# UI를 구성하는 부분입니다.
window = tk.Tk()
window.title("파일 선택 및 복사")
# 각종 레이블과 입력 필드, 버튼을 생성하고 위치시킵니다.
source_base_dir_label = tk.Label(window, text="원본 기본 디렉토리:")
source_base_dir_label.grid(row=0, column=0)
source_base_dir_entry = tk.Entry(window, width=50)
source_base_dir_entry.grid(row=0, column=1)
source_browse_button = tk.Button(window, text="찾아보기", command=browse_source_dir)
source_browse_button.grid(row=0, column=2)
source_folder_name_label = tk.Label(window, text="원본 폴더 이름:")
source_folder_name_label.grid(row=1, column=0)
source_folder_name_entry = tk.Entry(window, width=50)
source_folder_name_entry.grid(row=1, column=1)
target_base_dir_label = tk.Label(window, text="대상 기본 디렉토리:")
target_base_dir_label.grid(row=2, column=0)
target_base_dir_entry = tk.Entry(window, width=50)
target_base_dir_entry.grid(row=2, column=1)
target_browse_button = tk.Button(window, text="찾아보기", command=browse_target_dir)
target_browse_button.grid(row=2, column=2)
target_folder_name_label = tk.Label(window, text="대상 폴더 이름:")
target_folder_name_label.grid(row=3, column=0)
target_folder_name_entry = tk.Entry(window, width=50)
target_folder_name_entry.grid(row=3, column=1)
start_num_label = tk.Label(window, text="시작 번호:")
start_num_label.grid(row=4, column=0)
start_num_entry = tk.Entry(window, width=10)
start_num_entry.grid(row=4, column=1)
end_num_label = tk.Label(window, text="끝 번호:")
end_num_label.grid(row=5, column=0)
end_num_entry = tk.Entry(window, width=10)
end_num_entry.grid(row=5, column=1)
copy_button = tk.Button(window, text="복사", command=select_and_copy_files)
copy_button.grid(row=6, column=1)
result_label = tk.Label(window, text="")
result_label.grid(row=7, column=1)
# 애플리케이션의 메인 이벤트 루프를 시작합니다.
window.mainloop()
아래는 위 코드에서 사용된 모든 Python 함수 및 명령어들입니다.
표준 라이브러리
- 🔗
import os: 운영 체제와 상호 작용하는 다양한 기능을 제공하는 모듈.os.path.join: 파일 경로를 결합하는 함수.os.listdir: 디렉토리 내의 파일 및 디렉토리 목록을 반환하는 함수.os.path.splitext: 파일 이름과 확장자를 분리하는 함수.
- 🔗
import shutil: 파일 및 디렉토리 작업을 위한 고수준의 기능을 제공하는 모듈.shutil.copy2: 파일을 복사하면서 메타데이터(예: 타임스탬프)를 유지하는 함수.
- 🔗
import tkinter as tk: GUI 애플리케이션을 만드는 데 사용되는 모듈.tk.Tk: 애플리케이션 창을 생성하는 클래스.tk.Label: 텍스트 레이블을 생성하는 클래스.tk.Entry: 단일 줄 텍스트 입력 필드를 생성하는 클래스.tk.Button: 버튼을 생성하는 클래스.tk.filedialog.askdirectory: 디렉토리 선택 대화 상자를 여는 함수.
함수 정의
- 🔗
select_and_copy_files(): 파일을 선택하고 지정된 범위 내의 파일들을 복사하는 함수.source_base_dir_entry.get(): 원본 기본 디렉토리 입력 필드에서 사용자가 입력한 값을 가져오는 메서드.source_folder_name_entry.get(): 원본 폴더 이름 입력 필드에서 사용자가 입력한 값을 가져오는 메서드.target_base_dir_entry.get(): 대상 기본 디렉토리 입력 필드에서 사용자가 입력한 값을 가져오는 메서드.target_folder_name_entry.get(): 대상 폴더 이름 입력 필드에서 사용자가 입력한 값을 가져오는 메서드.start_num_entry.get(): 시작 번호 입력 필드에서 사용자가 입력한 값을 가져오는 메서드.end_num_entry.get(): 끝 번호 입력 필드에서 사용자가 입력한 값을 가져오는 메서드.result_label.config(): 결과 레이블의 텍스트를 설정하는 메서드.
- 🔗
browse_source_dir(): 원본 디렉토리를 탐색하고 선택하는 함수.source_base_dir_entry.delete(0, tk.END): 원본 기본 디렉토리 입력 필드의 내용을 지우는 메서드.source_base_dir_entry.insert(0, filedialog.askdirectory()): 디렉토리 선택 대화 상자를 열고 선택한 디렉토리 경로를 입력 필드에 삽입하는 메서드.
🔗browse_target_dir(): 대상 디렉토리를 탐색하고 선택하는 함수.target_base_dir_entry.delete(0, tk.END): 대상 기본 디렉토리 입력 필드의 내용을 지우는 메서드.target_base_dir_entry.insert(0, filedialog.askdirectory()): 디렉토리 선택 대화 상자를 열고 선택한 디렉토리 경로를 입력 필드에 삽입하는 메서드.
GUI 구성 요소
🔗window.title(): 애플리케이션 창의 제목을 설정하는 메서드.🔗tk.Label(): GUI에서 텍스트 레이블을 생성하는 클래스..grid(): 레이블의 위치를 설정하는 메서드.
tk.Entry(): GUI에서 텍스트 입력 필드를 생성하는 클래스..grid(): 입력 필드의 위치를 설정하는 메서드.
tk.Button(): GUI에서 버튼을 생성하는 클래스..grid(): 버튼의 위치를 설정하는 메서드..config(): 버튼의 텍스트 또는 기타 속성을 설정하는 메서드.
🔗window.mainloop(): 애플리케이션의 메인 이벤트 루프를 시작하는 메서드.
주요 함수 및 클래스
🔗os 모듈
os.path.join()os.listdir()os.path.splitext()
🔗shutil 모듈
shutil.copy2()
🔗tkinter 모듈
tk.Tk()tk.Label()tk.Entry()tk.Button()tk.filedialog.askdirectory()
위 코드는 파일을 선택하고 복사하는 GUI 애플리케이션을 만드는 데 필요한 주요 Python 함수 및 명령어들을 포함하고 있습니다. 각 함수와 클래스는 특정 작업을 수행하며, 전체 애플리케이션의 기능을 구성하는 데 필수적인 역할을 합니다.