메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

Python xml파일 검색 후 rename

데브카페
  • 상위 폴더 a에서 시작하여 하위 모든 폴더를 재귀적으로 탐색하면서 .xml 파일을 찾아, 해당 파일을 폴더1_폴더2_..._파일명.xml 형식으로 변경하는 파이썬 프로그램
import os

def rename_xml_files_in_tree(root_dir):
    for dirpath, _, filenames in os.walk(root_dir):
        for filename in filenames:
            if filename.lower().endswith(".xml"):
                abs_path = os.path.join(dirpath, filename)
                
                # 상대 경로를 구해서 폴더명들과 파일명을 연결
                rel_path = os.path.relpath(abs_path, root_dir)
                parts = rel_path.split(os.sep)

                # 파일명에서 확장자 분리
                name_without_ext, ext = os.path.splitext(parts[-1])
                
                # 새 파일명 만들기 (폴더와 파일 이름 모두 언더스코어로 연결)
                flat_name = "_".join(parts[:-1] + [name_without_ext]) + ext
                new_path = os.path.join(dirpath, flat_name)

                # 중복되지 않으면 이름 변경
                if abs_path != new_path:
                    os.rename(abs_path, new_path)
                    print(f"Renamed:\n{abs_path} ->\n{new_path}\n")

# 사용 예시 (상위 폴더 'a'를 기준으로 실행)
rename_xml_files_in_tree("a")


예시:

폴더 구조가 다음과 같을 경우:

a/
├── b/
│   └── c/
│       └── d/
│           └── t.xml
  • 실행 후 결과는:
a/b/c/d/t.xml → a/b/c/d/a_b_c_d_t.xml


참고 사항: • os.walk()로 전체 하위 폴더를 탐색합니다. • os.path.relpath()로 a 폴더 기준 상대 경로를 구하고, 각 디렉토리 이름과 파일명을 _로 연결합니다. • 이름이 이미 변경된 상태이거나 중복된다면 변경하지 않습니다.

Comments