웹 이미지 데이터 정제 및 파일명 처리 기법

  1. (MidJourney 데이터 분리) MidJourney 생성된 이미지 파일들을 별도 폴더로 이동

  2. (일괄 이름 변경) 필요 없는 웹 콘텐츠 관련 파일은 일괄적으로 이름을 수정하여 구분

  3. (크롤링된 제목 정제) 외부에서 수집한 파일명에 포함된 특수문자와 숫자를 제거하되, 쉼표, 마침표, 괄호 및 괄호 내 숫자는 유지

import os
import re

def sanitize_filename(filename):
    # 괄호 안의 숫자는 보존
    filename = re.sub(r'(?<!\()\d+(?!\))', '', filename)
    # 특수문자(밑줄 포함)는 공백으로 변환, 괄호, 쉼표, 마침표만 유지
    filename = re.sub(r'[^\w\s\(\),\.]|_', ' ', filename)
    # 양끝 공백 제거
    return filename.strip()

def is_image_extension(filename):
    return filename.lower().endswith(('.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff'))

def ensure_unique_name(folder_path, base_name):
    ext = os.path.splitext(base_name)[1]
    counter = 1
    new_name = base_name
    while os.path.exists(os.path.join(folder_path, new_name)):
        new_name = f"{os.path.splitext(base_name)[0]} ({counter}){ext}"
        counter += 1
    return new_name

def process_folder(directory):
    for root, _, files in os.walk(directory):
        for file in files:
            if is_image_extension(file):
                clean_name = sanitize_filename(file)
                unique_name = ensure_unique_name(root, clean_name)
                old_path = os.path.join(root, file)
                new_path = os.path.join(root, unique_name)
                os.rename(old_path, new_path)
                print(f"변경됨: {file} → {unique_name}")

def main():
    path = input("처리할 폴더 경로 입력: ")
    if not os.path.exists(path):
        print("유효하지 않은 경로입니다.")
        return
    process_folder(path)
    print("처리 완료.")

if __name__ == "__main__":
    main()
  1. (텍스트 파일을 통한 접두사 추가) 원본 정보를 유지해야 하는 경우, 해당 폴더 내에 .txt 파일을 생성하고, 그 내용을 각 이미지 파일명 앞에 삽입 (마지막이 쉼표가 아니면 자동 추가)
import os

def is_image_file(filename):
    extensions = {'.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff'}
    return filename.lower().endswith(tuple(extensions))

def load_prefix_from_txt(folder_path):
    for file in os.listdir(folder_path):
        if file.lower().endswith('.txt'):
            prefix = file[:-4]  # 확장자 제거
            if not prefix.endswith(','):
                prefix += ','
            return prefix
    return None

def add_prefix_to_images(folder_path, prefix):
    for root, _, files in os.walk(folder_path):
        for file in files:
            if is_image_file(file):
                new_name = prefix + file
                old_path = os.path.join(root, file)
                new_path = os.path.join(root, new_name)
                os.rename(old_path, new_path)
                print(f"이름 변경: {file} → {new_name}")

def main():
    target_dir = input("폴더 경로 입력: ")
    for root, dirs, _ in os.walk(target_dir):
        for subdir in dirs:
            subfolder = os.path.join(root, subdir)
            prefix = load_prefix_from_txt(subfolder)
            if prefix:
                add_prefix_to_images(subfolder, prefix)
    print("모든 작업 완료.")

if __name__ == "__main__":
    main()
  1. (Stable Diffusion BLIP 활용 자동 설명 생성) 하위 폴더를 재귀적으로 탐색하며, 각 이미지에 대해 Stable Diffusion의 BLIP 모델을 사용해 자연어 설명 추출하고, 같은 이름의 .txt 파일로 저장

  2. (텍스트 파일 내 괄호 및 숫자 삭제) 모든 하위 폴더의 .txt 파일에서 괄호와 숫자를 제거

import os
import re

def remove_brackets_and_numbers(text):
    return re.sub(r'[\d\(\)]', '', text)

def process_text_files(directory):
    for root, _, files in os.walk(directory):
        for file in files:
            if file.endswith('.txt'):
                file_path = os.path.join(root, file)
                with open(file_path, 'r', encoding='utf-8') as f:
                    content = f.read()
                cleaned_content = remove_brackets_and_numbers(content)
                with open(file_path, 'w', encoding='utf-8') as f:
                    f.write(cleaned_content)

if __name__ == "__main__":
    folder = input("대상 디렉토리 경로 입력: ")
    process_text_files(folder)
    print("처리 완료.")

태그: python 파일 정리 정규식 Stable Diffusion BLIP

6월 27일 06:10에 게시됨