Python을 써서 파일을 관리해보자

 파이썬은 스크립트 언어다. 즉, 편리하게 빨리 필요한 컴퓨터 도구를 만들 수 있도록 도와준다. 오늘은 파일을 다루는 일을 해보자. 


아래와 같은 폴더가 있다고 하자. JPG로 끝나는 사진 파일을 카카오부터 받았다. 이제 이 파일의 이름을 한번에 바꾸는 스크립트를 짜보려 한다.



파일 이름을 정리하는 일은 참으로 번거롭다. 하지만 파이썬을 쓰면 일도 아니다.


우선 배워야 할 것들이 있으니 살펴보자.


from os.path import isfile

from os import listdir

모듈 os.path로부터 isfile과 listdir 함수를 가져온다.

isfile()은 파일인지 체크하고, listdir은 폴더 내에 있는 여러 오브젝트의 이름을 list로 돌려준다.


어떻게 작동되냐면..



이렇게 보인다. 현재 작업 폴더가 사진/sample_pic인데 그 안에 들어 있는 파일과 폴더를 모두 보여준다. 우리가 관심이 있는 것은 .jpg로 끝나는 것들이다.

fromFile=[i for i in listdir() if isfile(i) and i.endswith('.jpg')]

파일인지 확인하고 jpg로 끝나면 그 이름을 저장하자. 결과는?


깔끔하게 우리가 원하는 파일만 저장했다.

이제 파일 이름을 바꿀 차례다. 필요한 함수는 os 모듈의 rename()이다. 가져오자.


from os import rename


새로 만들 이름을 정의한다.


newFile=["pic{:03d}.jpg".format(i) for i in range(len(fromFile))]


이제 반복문으로 처리하면 된다.

for i in range(len(fromFile)):

     rename(fromFile[i],newFile[i])



파일 이름이 pic000.jpg부터 pic003.jpg까지 바뀌었다.


이제 어떻게 작동되는지 알게되었으니,

실행 코드를 rename.py 파일로 만들어서 한번에 처리하도록 하자.

다음은 rename.py의 내용이다.


from os.path import isfile

from os import rename,listdir


class ReName:

    def __init__(self):

        self.target=[]

    def get_file_only(self,ext):

        self.target=[i for i in listdir() if isfile(i) and i.endswith(ext)]

    def run(self,code='pic'):

        for i in range(len(self.target)):

            rename(self.target[i],"{}{:03d}.jpg".format(code,i))

#PROGRAM START

if __name__=="__main__":

    tool=ReName()

    tool.get_file_only(".jpg")

    tool.run('pic')

    #

    tool.get_file_only(".jpg")

    tool.run('mypic')

    


이제 Aanaconda 콘솔에서 실행해보자.


같은 경로에 rename.py 파일이 포함되어 있다.


파일 이름이 pic000.jpg로 바뀌었다가 다시 mypic000.jpg로 바뀌었다.


    tool=ReName()

    tool.get_file_only(".jpg")

    tool.run('pic')

이 세줄의 코드로 파일 이름을 제어한다. 여러분도 각자에게 적합한 코드를 작성해서 그림 파일을 한번에 바꾸는 도구를 제작해보자.

댓글 3개:

  1. 모듈 os 안에 포함된 다른 함수나 클래스를 알아보자.

    답글삭제
  2. 모듈 os.path 안에 포함된 다른 함수나 클래스를 알아보자.

    답글삭제
  3. if __name__=="__main__": 은 왜 필요할까?

    답글삭제

PyR Intro - 신입생OT학기제