개요
`select_and_copy_files()` 함수는 사용자가 지정한 디렉토리에서 파일을 선택하고, 선택된 파일들을 다른 디렉토리로 복사하는 기능을 제공합니다. 이 함수는 특히 파일 관리 및 자동화 작업에 유용합니다.
구문
def select_and_copy_files():
# 코드 내용
필수 모듈
이 함수는 Python 표준 라이브러리의 `os`, `shutil`, `tkinter` 모듈을 사용합니다. 이 모듈들은 각각 파일 및 디렉토리 작업, 파일 복사, GUI 구성 요소를 제공합니다.
상세 설명
`select_and_copy_files()` 함수는 다음과 같은 단계로 구성됩니다:
- 사용자로부터 원본 디렉토리, 대상 디렉토리, 파일 범위 등을 입력받습니다.
- 원본 디렉토리에서 파일 목록을 가져옵니다.
- 지정된 범위 내의 파일들을 대상 디렉토리로 복사합니다.
- 복사 작업의 결과를 사용자에게 알립니다.
예제 코드
import os
import shutil
import tkinter as tk
from tkinter import filedialog
def select_and_copy_files():
source_base_dir = source_base_dir_entry.get() # 원본 기본 디렉토리
source_folder_name = source_folder_name_entry.get() # 원본 폴더 이름
target_base_dir = target_base_dir_entry.get() # 대상 기본 디렉토리
target_folder_name = target_folder_name_entry.get() # 대상 폴더 이름
start_num = int(start_num_entry.get()) # 시작 번호
end_num = int(end_num_entry.get()) # 끝 번호
# 결과 메시지 초기화
result_label.config(text="")
source_dir = os.path.join(source_base_dir, source_folder_name)
target_dir = os.path.join(target_base_dir, target_folder_name)
if not os.path.exists(source_dir):
result_label.config(text=f"Source directory does not exist: {source_dir}")
return
if not os.path.exists(target_dir):
os.makedirs(target_dir)
files = os.listdir(source_dir)
copied_files = []
for file in files:
file_name, file_ext = os.path.splitext(file)
if file_name.isdigit():
file_num = int(file_name)
if start_num <= file_num <= end_num:
source_file_path = os.path.join(source_dir, file)
target_file_path = os.path.join(target_dir, file)
shutil.copy2(source_file_path, target_file_path)
copied_files.append(file)
result_label.config(text=f"Copied files: {', '.join(copied_files)}")
def browse_source_dir():
source_dir = filedialog.askdirectory()
source_base_dir_entry.delete(0, tk.END)
source_base_dir_entry.insert(0, source_dir)
def browse_target_dir():
target_dir = filedialog.askdirectory()
target_base_dir_entry.delete(0, tk.END)
target_base_dir_entry.insert(0, target_dir)
window = tk.Tk()
window.title("Select and Copy Files")
tk.Label(window, text="Source Base Directory:").grid(row=0, column=0)
source_base_dir_entry = tk.Entry(window)
source_base_dir_entry.grid(row=0, column=1)
tk.Button(window, text="Browse", command=browse_source_dir).grid(row=0, column=2)
tk.Label(window, text="Source Folder Name:").grid(row=1, column=0)
source_folder_name_entry = tk.Entry(window)
source_folder_name_entry.grid(row=1, column=1)
tk.Label(window, text="Target Base Directory:").grid(row=2, column=0)
target_base_dir_entry = tk.Entry(window)
target_base_dir_entry.grid(row=2, column=1)
tk.Button(window, text="Browse", command=browse_target_dir).grid(row=2, column=2)
tk.Label(window, text="Target Folder Name:").grid(row=3, column=0)
target_folder_name_entry = tk.Entry(window)
target_folder_name_entry.grid(row=3, column=1)
tk.Label(window, text="Start Number:").grid(row=4, column=0)
start_num_entry = tk.Entry(window)
start_num_entry.grid(row=4, column=1)
tk.Label(window, text="End Number:").grid(row=5, column=0)
end_num_entry = tk.Entry(window)
end_num_entry.grid(row=5, column=1)
tk.Button(window, text="Copy Files", command=select_and_copy_files).grid(row=6, columnspan=3)
result_label = tk.Label(window, text="")
result_label.grid(row=7, columnspan=3)
window.mainloop()
주요 함수 설명
os 모듈
os.path.join(): 파일 경로를 결합하는 함수.os.listdir(): 디렉토리 내의 파일 및 디렉토리 목록을 반환하는 함수.os.path.exists(): 경로의 존재 여부를 확인하는 함수.os.makedirs(): 새로운 디렉토리를 생성하는 함수.
shutil 모듈
shutil.copy2(): 파일을 복사하면서 메타데이터(예: 타임스탬프)를 유지하는 함수.
tkinter 모듈
tk.Tk(): 애플리케이션 창을 생성하는 클래스.tk.Label(): 텍스트 레이블을 생성하는 클래스.tk.Entry(): 단일 줄 텍스트 입력 필드를 생성하는 클래스.tk.Button(): 버튼을 생성하는 클래스.tk.filedialog.askdirectory(): 디렉토리 선택 대화 상자를 여는 함수.
주의 사항
- 사용자가 입력한 디렉토리와 파일 범위를 정확히 확인해야 합니다.
- 복사 작업 중 덮어쓰기 방지를 위해 대상 디렉토리의 파일 목록을 사전에 확인하는 것이 좋습니다.
- 파일 이름이 숫자로 되어 있는지 확인하기 위해
file_name.isdigit()메서드를 사용합니다.
결론
`select_and_copy_files()` 함수는 파일 관리 작업을 자동화하는 데 매우 유용한 도구입니다. 사용자가 지정한 조건에 따라 파일을 선택하고 복사하는 기능을 제공하여 효율적인 파일 관리를 가능하게 합니다. 이 매뉴얼은 함수의 작동 원리와 사용법을 상세히 설명하여 초보자도 쉽게 이해하고 사용할 수 있도록 합니다.