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)
폴더 안에 있는 모든 파일 이름을 변경하기 때문에 주의해서 사용해야 합니다.
임시로 폴더를 만들어 변경하고 싶은 파일만 넣어서 변경하는 방법도 있습니다.
다른 방법으로는 소스에 확장자를 지정해서 작성해서 원하는 확장자 파일만 변경할 수도 있습니다.
댓글