Python 파일 이름 일괄 변경 방법 예제

os 모듈과 glob 모듈을 사용해서 폴더 안에 있는 파일명을 일괄로 변경하는 방법을 보겠습니다.

먼저 예제 소스를 만들기 위해 임시로 폴더와 파일이 있다가 가정하겠습니다.

.
└── testdir
    ├── a.jpg
    ├── b.jpg
    ├── c.jpg
    ├── d.jpg
    └── e.jpg

glob을 사용해서 지정한 폴더 안에 있는 파일을 취득하려고 합니다.

그러면 파일 이름을 모두 변경하는 예제를 보겠습니다.

import os
import glob

path = "./testdir"
files = glob.glob(path + '/*')

for f in files:
    os.rename(f, os.path.join(path, 'img_' + os.path.basename(f)))

 

결과

.
└── testdir
    ├── img_a.jpg
    ├── img_b.jpg
    ├── img_c.jpg
    ├── img_d.jpg
    └── img_e.jpg

모든 파일을 리스트 형태로 취득해 for에서 파일 이름을 변경했습니다.

기존의 파일명 앞에 img_ 라는 문자를 붙였습니다.

이번에는 자동으로 번호를 붙이는 방법을 보겠습니다.

import os
import glob

path = "./testdir"
files = glob.glob(path + '/*')

for i, f in enumerate(files):
    os.rename(f, os.path.join(path, '{0:03d}'.format(i) +
                              '_' + os.path.basename(f)))

 

결과

.
└── testdir
    ├── 000_a.jpg
    ├── 001_b.jpg
    ├── 002_c.jpg
    ├── 003_d.jpg
    └── 004_e.jpg

000부터  시작해 기존 파일명 앞에 숫자를 순서대로 붙이고 있습니다.

기존 파일명 뒤에 문자를 붙이고 싶은 경우에는 아래처럼 작성할 수 있습니다.

import os
import glob

files = glob.glob('./testdir/*')

for f in files:
    ftitle, fext = os.path.splitext(f)
    os.rename(f, ftitle + '_img' + fext)

 

지정 문자가 아닌 000부터 붙이고 싶은 경우는 아래처럼 작성할 수 있습니다.

import os
import glob

files = glob.glob('./testdir/*')

for i, f in enumerate(files):
    ftitle, fext = os.path.splitext(f)
    os.rename(f, ftitle + '_' + '{0:03d}'.format(i) + fext)

 

폴더 안에 있는 모든 파일 이름을 변경하기 때문에 주의해서 사용해야 합니다.

임시로 폴더를 만들어 변경하고 싶은 파일만 넣어서 변경하는 방법도 있습니다.

다른 방법으로는 소스에 확장자를 지정해서 작성해서 원하는 확장자 파일만 변경할 수도 있습니다.

댓글