TOP
class="layout-aside-left paging-number">
본문 바로가기
[파이썬 Projects]/<파이썬 업무 자동화>

[파이썬] 폴더 내의 파일 분류시키기

by 기록자_Recordian 2024. 9. 7.
728x90
반응형

전이 학습을 위해 이미지를 폴더로 분류해야 하는데, 

학습을 할 이미지가 있는 폴더에는 각 클래스의 이름을 딴 하위 폴더(예: 'tire' 및 'non_tire')가 포함되어야 하며 이러한 하위 폴더에는 이미지 파일이 포함되어야 한다.

 

따라서, 하단의 이미지 처럼 되어 있는 폴더를 파일명에 있는 클래스 ('tire' / 'non_tire') 에 따라 새로운 폴더를 만들어 이동을 시켜줘야 한다.

 

 

[해당 코드]

import os
import shutil

# Define the source directory and destination folders
source_directory = r'C:\Users\niceq\Desktop\Startup-related\Tire Scanner\Tire images\Classified Images'
tire_directory = os.path.join(source_directory, 'tire')
non_tire_directory = os.path.join(source_directory, 'non_tire')

# Create destination folders if they don't exist
os.makedirs(tire_directory, exist_ok=True)
os.makedirs(non_tire_directory, exist_ok=True)

# List all files in the source directory
for filename in os.listdir(source_directory):
    # Construct old file path
    old_file_path = os.path.join(source_directory, filename)
    
    # Skip directories
    if os.path.isdir(old_file_path):
        continue
    
    # Determine new folder based on filename
    if '_tire' in filename:
        new_file_path = os.path.join(tire_directory, filename)
    elif '_non_tire' in filename:
        new_file_path = os.path.join(non_tire_directory, filename)
    else:
        # Skip files that don't match any criteria
        continue
    
    # Move the file
    shutil.move(old_file_path, new_file_path)
    print(f"Moved: {old_file_path} -> {new_file_path}")

print("File moving completed.")

 

<코드 설명>

  • 디렉터리 정의: 'tire' 및 'non_tire' 대상 폴더의 소스 디렉터리와 경로를 지정.
  • 대상 폴더 생성: 대상 폴더가 아직 존재하지 않는 경우 os.makedirs를 사용하여 대상 폴더를 생성. exist_ok=True 매개변수는 폴더가 이미 존재하는 경우 오류를 방지.
  • 파일 목록: 소스 디렉터리의 모든 파일을 나열.
  • 파일 확인 및 이동: 각 파일에 대해 파일 이름을 기준으로 tire 또는 non_tire 폴더로 이동해야 하는지 결정. shutil.move를 사용하여 파일을 적절한 폴더로 이동.
  • 디렉터리 건너뛰기: 디렉터리를 건너뛰고 파일만 이동했는지 확인.

 

<실행 결과>

'Classified Images' 폴더 내의 이미지들이 파일 명에 따라 분류되었다.

 

728x90
반응형