====== 묻지도 따지지도 말고! 파이썬 요리책 ====== 요리책은 요리에 쓰는 거지만, 은근히 프로그래밍에도 많이 사용됩니다. 묻지도 따지지도 않고 패턴화된 일을 할 때가 있습니다. 그런데 그것이 가끔씩 있는 일이다보니 자주 잊어버리는 때도 많습니다. 이럴 때 요리 레시피를 적듯 '코드 레시피'를 적어 두면 편리할 것입니다. 여기는 이러한 코드 레시피를 모아둔 파이썬 요리책 문서입니다. ===== 파일과 디렉토리에 대한 관리 ===== ==== 디지털 카메라 사진들을 연/월별로 분류하기 ==== 디지털 카메라의 각각 파일에는 보통 'Exif 정보'란 것이 있습니다. 이 정보에는 사진에 대한 '메타데이터(metadata)'를 담고 있습니다.메타데이터는 어떤 자료를 설명하기 위해 추가되는 부가적인 자료들을 말합니다. 디지털 사진을 찍게 되면 보통 사진의 영상외에도 이 사진이 언제 (혹은 어디서 까지도) 어떻게 찍혔는지에 대한 자료들이 같이 이미지 파일에 저장됩니다. 이런 자료들을 저장하기 위한 포맷을 일컬어 Exif라고 합니다. 이 Exif 자료를 이용한다면 한 폴더에 왕창 쌓여있는 사진들을 연도별로, 월별로 분류할 수 있습니다. 저는 모 클라우드 저장소에 스마트폰을 이용해 찍은 사진을 백업했는데, 알아서 월별로 사진을 구분해 폴더별로 정리하는 것을 보았습니다. 나름 정리가 되어 괜찮다고 생각했는데요, 파이썬을 이용해 이 기능을 흉내내 보겠습니다. 프로그램의 동작 얼개는 간단합니다. - 사진이 있는 디렉토리를 입력으로 줍니다. 하위 디렉토리는 존재하지 않고 편평하게 사진 파일만 수두룩하게 있다고 가정합니다. 그리고 사진에는 모두 Exif 정보가 있다고 가정합니다. 만일 정보가 없다면 건너뜁니다. - 각각의 사진 파일의 Exif 정보 중, 사진이 촬영된 시간을 읽어냅니다. - 사진이 촬영된 연도와 월을 추출해 그 연도의 그 월 폴더를 만듭니다. 이미 만들어져 있으면 관계없습니다. - 파일을 해당 폴더로 이동합니다. - 모든 사진 파일에 대해 작업을 반복합니다. ==== 파일 내부의 특정 문자 패턴 치환하기 ==== 어떤 분이 제게 파일의 내부의 특정 단어를 다른 단어로 바꾸는 프로그램에 관한 질문으로 이메일로 보내 주셨습니다. 이런 프로그램은 사람마다 조금 다르겠지만 대개 평소에 쓸 일은 많지 않아 보입니다. 하지만 왠지 있으면 좋을 것 같습니다. 왠지 쓸모없지만 있어도 나쁘지 않은 프로그램, 딱 제 스타일입니다 :) 만들어 보도록 하겠습니다. ==== 여러 폴더를 각각의 이름으로 압축하기 ==== 파이썬으로 압축을 할 수도 있고 다시 풀 수도 있습니다. 사실 탐색기에서 마우스 버튼으로 클릭하면 한 방에 해결되는 일인데, 굳이 파이썬을 쓸 일은 없죠. 하지만 제게 이런 경우가 있었더랬습니다. 압축 파일을 풀었는데 폴더가 수십개였습니다. 폴더는 어떤 규칙을 가진 연속적인 이름을 가져야 하는데, 몇몇 폴더에 실수가 있어 이름으로 정렬을 했을 때 제대로 정렬이 되지 않았습니다. 어쨌든 폴더 이름이 잘못된 몇 개 정도는 쉽사리 수정할 수 있었습니다. 하지만 저는 폴더별로 하나씩 압축 파일을 만들고 싶었습니다. 그러려니 일일이 폴더마다 오른쪽 마우스를 클릭해 압축 메뉴를 눌러 압축을 해야 하더군요. 꽤 번거로웠지요. 다 정해진 규칙이 있는데 규칙대로 하면 한 번에 프로그래밍을 할 수 있었을 텐데 하고 고민했던 적이 있었습니다. 파이썬을 몰랐을 때 말이죠. 이제는 만들어 봅니다. 한 폴더 내 여러 폴더를 각각의 이름으로 압축하기! ===== 웹 관련 ===== ==== 인터넷 익스플로러 뒤에서 조종하기 ==== 매번 웹브라우저로 정해진 작업을 수행하는 분 있으신가요? 희소식을 전해 드립니다. 파이썬을 조금만 배워보세요! 그 지루한 작업을 한방에 해결해 드릴 수도 있습니다. 우선 인터넷 익스플로러부터 조종해볼까요? ===== 멋진 파이썬 예제들 ===== * http://code.activestate.com/recipes/langs/python/ * http://coreapython.hosting.paran.com/howto/sebsauvage_net-%20Snyppets%20-%20Python%20snippets.htm