파일이 수백 개씩 있을 때 하나하나 이름을 바꾸는 것은 비효율적입니다. Python의 os.walk와 os.rename을 활용하면 폴더와 그 하위 폴더까지 탐색하면서 조건에 맞는 파일명을 자동으로 일괄 변경할 수 있습니다.
핵심 원리
os.walk는 지정한 폴더를 시작으로 모든 하위 디렉터리를 재귀적으로 순회하며 각 경로의 폴더명, 하위 폴더 목록, 파일 목록을 반환합니다. 이 정보를 바탕으로 os.rename으로 파일 이름을 변경하면 됩니다.
예제 코드
import os
def replace(folder_path, old, new):
for path, subdirs, files in os.walk(folder_path):
for name in files:
if(old.lower() in name.lower()):
file_path = os.path.join(path, name)
new_name = os.path.join(path, name.lower().replace(old, new))
os.rename(file_path, new_name)사용 방법
replace('my_folder', 'IMG', 'Image')코드 설명
위 함수는 다음과 같은 순서로 동작합니다.
1. os.walk가 'my_folder'와 그 안의 모든 하위 폴더를 순회합니다.
2. 각 폴더에서 파일 이름에 대소문자 구분 없이 'IMG'가 포함되어 있는지 확인합니다.
3. 포함된 파일이라면 전체 경로를 만들고, 'IMG'를 'Image'로 교체한 새 이름을 생성합니다.
4. os.rename으로 기존 파일을 새 이름으로 변경합니다.
실행 결과, 해당 폴더와 모든 하위 폴더 내의 파일들에서 'IMG'가 'Image'로 일괄 치환됩니다.
활용 팁
- 대소문자 구분 없이 검색하고 싶지 않다면 if(old.lower() in name.lower()) 부분을 if(old in name)으로 수정하세요.
- 확장자만 변경하고 싶다면 os.path.splitext를 함께 사용하면 편리합니다.
- 실수로 인한 데이터 손실을 방지하려면 먼저 소량의 테스트 폴더로 동작을 확인한 뒤 적용하는 것이 좋습니다.
- 필요에 따라 정규식(re 모듈)을 활용하면 더 복잡한 이름 변경 규칙도 손쉽게 구현할 수 있습니다.
이 함수는 상황에 맞게 자유롭게 수정하여 사용할 수 있으므로, 반복적인 파일 관리 작업을 자동화하는 데 유용하게 활용해 보세요.