본문 바로가기

코딩/업무자동화

[파이썬/업무자동화] 여러 폴더 안에 있는 파일명 한번에 바꾸기 1편

반응형

2021.06.01 - [코딩/업무자동화] - [파이썬/업무자동화] 여러 폴더 안에 있는 파일명 한번에 바꾸기 1편

2021.06.16 - [코딩/업무자동화] - [Python/파이썬] 여러 폴더 안에 있는 파일명 한번에 바꾸기 2편

 

 

  os모듈과 관련 된 내용을 검색하다가 빠른손김참치라는 블로그의 '여러 파일의 이름을 한번에 변경하기'라는 글을 보게 됨. 해당 블로그 글은 한 폴더의 여러 파일의 파일명을 한번에 변경할 때 사용하는 코드를 정리한 내용이다. 그 글의 댓글 중 아래 내용을 보게되었고 내가 코드를 업그레이드하여 작성해보는 포스팅

(참고한 블로그 글은 하단 참고링크에 명시)

 

<블로그 글 댓글 중>

 

 질문의 요지는 한 폴더가 아닌 1개 폴더 안에 여러개의 폴더가 있고 여러개의 폴더 파일명의 숫자 카운트가 이어지도록 파일명을 변경하는 것이다. 아래와 같은 상황을 이야기하는 것 같다.

 

 

1. 문제 정의

 

-. 한 폴더 안에 여러개의 폴더가 있다.

(test폴더 안에 test폴더1~4의 총 4개 폴더 존재)

 

 

-. 각 test 폴더1~4 안에는 임의의 파일명을 가진 이미지 파일이 있다.

(아래는 test폴더1 안의 내용으로 2,3,4 폴더에도 각 임의의 개수 이미지 파일이 있다.)

 

  

-. 각 폴더의 파일명을 이미지1.jpg, 이미지2.jpg, 이미지3.jpg .. 과 같은 번호 순번이 매겨지도록 바꾼다. 단, 폴더명이 바뀌어도 번호는 이어져야 한다.

 

 

 

2. 코드 설명 (전체 코드는 하단에 첨부)

 

 

1) 모듈 import

 

-. 디렉토리 및 파일을 다뤄야하기 때문에 os 모듈을 사용한다.

-. os 모듈에 대한 설명은 구글링을 하면 많이 나오므로 여기서는 생략.

 

<코드>

import os

 

 

 

2) 폴더 경로 지정 및 폴더 리스트 출력해보기

 

-. os 모듈 중 listdir( )이라는 함수는 특정 폴더안의 파일 및 폴더명을 리스트로 반환하여 출력해준다.

 

<코드>

#여러 폴더가 있는 경로
folderpath = r"C:\Users\Desktop\VS CODE\Project\filerename\test폴더"

#폴더명 받아오기
folderlist = os.listdir(folderpath)

#폴더명 리스트 출력해보기
print(folderlist)

 

<결과>

['test폴더1', 'test폴더2', 'test폴더3', 'test폴더4']

 

-. folderpath : 위 문제 정의에서 test 폴더의 경로이다. 위 처럼 역슬래시 경로를 사용할 경우 경로 문자열 맨 앞에 r을 넣어줘야 오류가 발생하지 않는다.(아니면 슬래쉬 사용)

 

 

 

3) 이중 for문을 통한 파일명 바꾸기

 

<코드>

i=0 #파일명 변경하기 위한 넘버링 변수

#폴더리스트를 for문을 통해 반복
for fname1 in folderlist:
    #해당 test 폴더(1,2,3,4) 위치 설정
    current_folder = folderpath + "/" + fname1
    #각 test폴더(1,2,3,4) 안의 파일명 받아오기
    filelist = os.listdir(current_folder)

    print("현재 폴더명 : ", fname1)
    #각 폴더명의 파일리스트를 다시 for문을 통해 반복
    for fname2 in filelist:
        #os.rename(a, b) : a를 b로 이름 변경. b는 저장될 위치도 지정하는 것이므로 같은 폴더에하려면 폴더명 지정
        print(fname2+"를 result"+str(i)+".jpg로 파일명을 변경합니다.")
        os.rename(current_folder+"/"+fname2, current_folder+"/"+"이미지"+str(i)+".jpg")
        i = i+1

 

<결과>

현재 폴더명 :  test폴더1
aasdfff.jpg를 이름바꾸기0.jpg로 파일명을 변경합니다.
aasdfsdfdfd.jpg를 이름바꾸기1.jpg로 파일명을 변경합니다.
gasdfasdf.jpg를 이름바꾸기2.jpg로 파일명을 변경합니다.

현재 폴더명 :  test폴더2
123123.jpg를 이름바꾸기3.jpg로 파일명을 변경합니다.
1asdf.jpg를 이름바꾸기4.jpg로 파일명을 변경합니다.
55123.jpg를 이름바꾸기5.jpg로 파일명을 변경합니다.

현재 폴더명 :  test폴더3
asdfc3.jpg를 이름바꾸기6.jpg로 파일명을 변경합니다.
ashhhh.jpg를 이름바꾸기7.jpg로 파일명을 변경합니다.
opo.jpg를 이름바꾸기8.jpg로 파일명을 변경합니다.

현재 폴더명 :  test폴더4
hda.jpg를 이름바꾸기9.jpg로 파일명을 변경합니다.

 

  자세한 내용은 주석을 확인하면 이해할 수 있지만 중요한 내용만 간단히 추려본다.

 

-. 위에서 폴더명을 리스트로 받아온 결과 folderlist를 다시 for문을 통해 각 폴더에 있는 파일명을 리스트로 받아온다.

   (이중 for 문 사용)

 

for fname1 in folderlist:
.
.
.
    print("현재 폴더명 : ", fname1)
    
    #각 폴더명의 파일리스트를 다시 for문을 통해 반복
    for fname2 in filelist:
.
.
.

 

-. os 모듈의 rename 함수 사용을 통해 파일명을 변경한다. current_floder는 현재 폴더를 가리킨다.

 

os.rename(current_folder+"/"+fname2, current_folder+"/"+"이미지"+str(i)+".jpg")

 


※ os.rename( ) 함수 사용법

os.rename(a, b) 
- a는 원래 파일명, b는 바꿀 파일명이다.
- b에 파일명이 있는 폴더로 설정시 폴더가 바뀌지 않고 해당 폴더 그대로 파일명이 변경 된다.(위 코드 참고)

 

-. 만약 아래 코드 처럼 바꿀 파일명에 경로 설정을 안하면 .py 파일이 실행되는 곳에 파일명이 바뀌어 이동 됨.

 

<코드>

os.rename(current_folder+"/"+fname2, "이미지"+str(i)+".jpg")

 

 

3. 전체 코드

 

<코드>

import os

#여러 폴더가 있는 경로
folderpath = r"C:\Users\Desktop\VS CODE\Project\filerename\test폴더"

#폴더명 받아오기
folderlist = os.listdir(folderpath)

#폴더명 리스트 출력해보기
print(folderlist)



i=0 #파일명 변경하기 위한 넘버링 변수

#폴더리스트를 for문을 통해 반복
for fname1 in folderlist:
    #해당 test 폴더(1,2,3,4) 위치 설정
    current_folder = folderpath + "/" + fname1
    #각 test폴더(1,2,3,4) 안의 파일명 받아오기
    filelist = os.listdir(current_folder)

    print("현재 폴더명 : ", fname1)
    #각 폴더명의 파일리스트를 다시 for문을 통해 반복
    for fname2 in filelist:
        #os.rename(a, b) : a를 b로 이름 변경. b는 저장될 위치도 지정하는 것이므로 같은 폴더에하려면 폴더명 지정
        print(fname2+"를 이름바꾸기"+str(i)+".jpg로 파일명을 변경합니다.")
        os.rename(current_folder+"/"+fname2, "test"+str(i)+".jpg")
        i = i+1

 

 

 

  위 방식은 파일명을 규칙성있게 넘버링하여 변경하는 방식이다. 사용자가 원하는 파일명으로 각각 바꾸고 싶은 방법을 찾는 사람은 다음 포스팅을 참고하면 된다.

(다음 포스팅 : 2021.06.16 - [코딩/업무자동화] - [Python/파이썬] 여러 폴더 안에 있는 파일명 한번에 바꾸기 2편)

 

[Python/파이썬] 여러 폴더 안에 있는 파일명 한번에 바꾸기 2편

이전 포스팅에서는 엑셀 여러 폴더의 파일명을 일관된 규칙으로 넘버링을 하여 바꾸는 방법을 정리하였다. (이전 포스팅 : 2021.06.01 - [코딩/업무자동화] - [파이썬/업무자동화] 여러 폴더 안에 있

ybworld.tistory.com

 

 

 

 

 


참고링크 : https://hogni.tistory.com/35

 

[파이썬] 여러 파일의 이름을 한번에 변경하기

파이썬에서는 os 모듈의 rename() 메서드를 사용해서 파일 또는 폴더의 이름을 간단히 변경할 수 있습니다. 예를들어 특정 폴더 안에 여러개의 사진 파일이 있을때, 이 사진들의 이름을 차례대로 1,

hogni.tistory.com

 

728x90