Python `select_and_copy_files()` 함수 상세 매뉴얼

Python select_and_copy_files 함수 상세 매뉴얼

개요

`select_and_copy_files()` 함수는 사용자가 지정한 디렉토리에서 파일을 선택하고, 선택된 파일들을 다른 디렉토리로 복사하는 기능을 제공합니다. 이 함수는 특히 파일 관리 및 자동화 작업에 유용합니다.

구문

def select_and_copy_files():
    # 코드 내용

필수 모듈

이 함수는 Python 표준 라이브러리의 `os`, `shutil`, `tkinter` 모듈을 사용합니다. 이 모듈들은 각각 파일 및 디렉토리 작업, 파일 복사, GUI 구성 요소를 제공합니다.

상세 설명

`select_and_copy_files()` 함수는 다음과 같은 단계로 구성됩니다:

  1. 사용자로부터 원본 디렉토리, 대상 디렉토리, 파일 범위 등을 입력받습니다.
  2. 원본 디렉토리에서 파일 목록을 가져옵니다.
  3. 지정된 범위 내의 파일들을 대상 디렉토리로 복사합니다.
  4. 복사 작업의 결과를 사용자에게 알립니다.

예제 코드

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()` 함수는 파일 관리 작업을 자동화하는 데 매우 유용한 도구입니다. 사용자가 지정한 조건에 따라 파일을 선택하고 복사하는 기능을 제공하여 효율적인 파일 관리를 가능하게 합니다. 이 매뉴얼은 함수의 작동 원리와 사용법을 상세히 설명하여 초보자도 쉽게 이해하고 사용할 수 있도록 합니다.