brunch

You can make anything
by writing

C.S.Lewis

by 마르코 Jan 30. 2016

파일 이름을 한 번에 바꿔줘

컴퓨터는 반복 작업을 매우 잘한다

아래 링크는 <내 손 안의 비서> 첫 글이자 전체 목차




상상해보자. 나는 아이맥을 사용하는 디지털 마케터다. 매일 페이스북 페이지와 같은 다양한 채널을 관리하기 위해 웹사이트 이곳저곳을 뒤지면서 콘텐츠에 녹일 좋은 이미지를 찾아다닌다. 물론 저작권 문제 때문에 콘텐츠에 쓰일 대부분의 이미지는 유료 이미지 사이트에서 찾아야겠지만, 흐리게 배경으로 넣을 이미지나 많은 이미지 작업을 해야 하는 경우 맥에서 제공해주는 command + shift + 4를 통해서 이미지를 바로 잘라서 바탕화면에 저장한다.(윈도우 컴퓨터가 스크린샷을 찍으면 클립보드에 저장되어 다른 곳에 붙여 넣기 하여 사용하는 것과 달리, 맥은 스크린샷을 찍으면서 바로 바탕화면에 저장이 가능하다.) 그렇게 몇 장씩 저장하다 보니, 아뿔싸 화면에는 이미지 파일이 넘쳐난다. 그렇게 몇 달이 지나니 도저히 컴퓨터 바탕화면에서 무언가를 찾기라는 불가능해졌다. 누군가 매일 파일 이름을 좀 정리해서 날짜별로 모을 수 있으면 좋겠다.


우선 알아야 할 것은 맥에서 파일명은 매번 스크린샷을 찍을 때마다, "Screen Shot 2028-09-19 at 7.37.34 PM"처럼 "Screen Shot" + 날짜 + 시간 형태로  저장된다는 것이다. 그리고 일괄적으로 확장자는 jpg로 표현한다. 나는 다른 내용은 필요 없고, "프로젝트A-1.jpg" 형태로 파일 이름을 일괄적으로 변경하고 싶다.


앞의 글에서는 쉘(shell)을 이용하여 바로 결과를 확인했는데, 이번에는 내용이 조금 길어지므로 파일로 따로 만들어서 저장해보도록 하겠다. 아래 코드는 바탕화면에 "change_file_name.py"라는 이름으로 저장한다. 실행은 맥은 터미널(terminal)에서 윈도우는 파워쉘(powershell)에서 바탕화면 폴더로 찾아가서,(맥의 경우 "cd ~/Desktop") "python change_file_name.py" 혹은 맥에서 python3를 사용한다면 "python3 change_file_name.py"라고 입력하면 된다.


~/Desktop/change_file_name.py

import os

index = 1
for _, _, files in os.walk("."):
   for filename in files:
      if filename.startswith("Screen Shot"):
         os.rename("./%s" % filename, "./프로젝트A-%d.jpg" % index)
         index += 1
주의! 파이썬은 들여쓰기에 매우 엄격하다. 해당 코드는 각각 스페이스 3번씩 들여쓰기 하였기 때문에, 정확히 옮겨주어야 에러가 나지 않는다.


바탕화면에 있는 이 7줄의 코드면 하나하나 이미지의 파일 이름을 변경하던 삶과도 안녕할 수 있다. 다만 바탕화면 안에 있는 모든 폴더의 "Screen Shot"으로 시작하는 이미지의 이름을 바꾼다는 것을 주의하자.


코드를 잠깐 살펴볼까? 컴퓨터의 파일을 조작할 수 있는 os라는 도구 상자가 있다.(import os) 그리고 파일에 순차적으로 번호를 붙여주기 위해, index라는 라벨을 만들어서 번호 1을 부여한다.(index = 1) 그리고 현재 위치(바탕화면)에서 파일(files) 정보를 나열한다.(for _, _, files in os.walk(".")) 그리고 각각의 파일을 다시 확인하는데,(for filename in files) 파일 이름이 "Screen Shot"으로 시작하면 (if filename.startswith("Screen Shot")) 해당 파일의 이름을 "프로젝트A-1.jpg"라는 형대로 바꿔준다. 중간의 1이라는 숫자는 제일 위에서 만든 라벨의 번호를 넣는다. 그리고 이름을 바꿔줄 때마다, 라벨의 번호를 1씩 증가시킨다. 다음 파일을 만나면  그다음 번호를 부여하기 위해서다.


더 궁금하다면? For loop


프로그래밍의 묘미는 사람이 처리하기 힘든 분량의 양을 엄청나게 빨리 처리한다는 것이다. 그렇게 하기 위해서는 어떤 행동을 반복하도록 하는 것이 중요한데, 그것을 For라는 형태로 표현한다. 영어에서도 "for 3 months"라고 하면 '3개월 간'이라는 의미를 가지지 않던가. 똑같다.


1부터 10까지의 숫자가 있다고 생각해보자. 파이썬에서는 이 리스트를 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]이라고 표현한다. 여기에 각각 10을 곱한 값을 얻고 싶다면?


for number in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
   print(number * 10)


위의 코드는 "[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]라는 리스트의 앞에서부터 숫자를 하나하나 꺼내서,(for number in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 거기에 10을 곱하고,(number * 10) 그 결과를 보여줘.(print)"라는 이야기다.




프로그래밍은 외계어가 아닙니다. 실생활에서 쓸 수 있는 프로그래밍을 알립니다. 그리고 댓글이 달릴수록 더 쉬워집니다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari