가끔 인터넷같은데서 만화를 다운받아서 볼 때가 있는데....
예를 들어 최신에도 계속 나오는 만화같은경우 127화. 128화 이렇게 화마다 폴더가 있다.
그리고 해당 폴더안에는 달랑 사진이 20장 이내로 들어있어서.... 알집으로 보다가 20장이 꽉차면
알집을 다시 끄고 뒤로 한번 온 뒤에 다음 화의 폴더를 누른후 알집이 켜지길 기다려야 한다.
이게 엄청나게 불편하다. 매번 짜증났는데 오늘 할것도없어서 정리해주는 스크립트를 만들어보기로 함.
exe를 실행한 후 해당 만화 폴더를 끌어오면 알아서 내부의 .jpg .png의 확장자가 있는 사진파일을들
한 폴더에 다 정리해준다. 나 혼자만 사용하려고 만든거기 때문에 버그가 많을 수 있음.
15/03/01 예외처리 추가. 위의 캡쳐 내용과 일부 실행 결과가 다를 수 있음.
15/06/01 만화책 알고리즘 변경.
15/11/21 일부 에러처리 등 더 개선.
예시.
클레이모어라는 폴더 내부에 저렇게 130화부터 145화까지 있다.
130화를 예시로 들어가보면 28장밖에 없다. 130화를 보고 131화를 보려면 28장을 본 후에 다시 131화 폴더로 들어가서 알씨든 뭐든 다시 켜야된다. 만화에 집중도가 떨어진다. 한번에 이어서 보려면...
위의 exe를 실행시키고 폴더를 끌어온다음 엔터를 치면 알아서 정리를 해준다. 다시 클레이모어 폴더에 들어가보면 정리라는 파일이 새로 생성됬다.
정리 폴더에 들어가보면 순서대로 잘 정리가 되었음을 확인할 수 있다.
*참고로 정리 순서는 위의 exe를 실행시켰을때 정리중... 이라고 나오는 순서대로 정리된다. 예제로 위의 클*이모어는 130,131,132,133~144,145 순으로 정리됬다.
py2exe options
#-*- coding: cp949 -*- from distutils.core import setup import py2exe setup( console=['hello.py'], options = {'py2exe': {'bundle_files':1,'dist_dir':'python exe','dist_dir':'C:\\Users\\Ko\\Desktop\\python exe',}}, zipfile = None )
코드.
# -*- encoding: cp949 -*- import os,re,shutil from operator import itemgetter while 1: d = {}; cnt = 1 print '만화책 정리 스크립트.\n책 제목에서 처음으로 나오는 숫자로 화, 권을 판별합니다.\n숫자가 없는 화, 권은 숫자 이후에 사전순서대로 이어붙입니다.' input_file = raw_input('파일 경로 입력(마우스로 해당 폴더 드래그하면 됩니다) : ') if input_file.find('"') != -1: input_file = input_file.replace('"','') if not os.path.exists(input_file): print '파일 경로를 잘못 입력한듯. 파일을 다시 끌어오세요\n' continue if not os.path.exists(input_file+'\\정리'): os.makedirs(input_file+'\\정리') #해당 경로 내부에 '정리'라는 폴더가 없으면 새로만듬. else: jungre = raw_input('\n경로 내부에 \'정리\'라는 이름의 폴더가 없어야 합니다!!!\n정리라는 폴더를 지워버리고 새로 만들까요? y/n') if jungre=='' or jungre=='y': shutil.rmtree(input_file+'\\정리', ignore_errors=True) os.makedirs(input_file+'\\정리') else: continue for all_dirname, inner_dirnames, all_filenames in os.walk(input_file): last = 99999 for i in inner_dirnames:#숫자만 보고 정렬. 그냥 무조건 숫자를 찾아서 첫번째 찾은 숫자대로 정렬. try: d[int(re.findall('\d+',i)[0])]=i except: d[last]=i last += 1 s_d = sorted(d.items(), key=itemgetter(0)) break inner_dirnames = [] for i in range(len(s_d)): inner_dirnames.append(s_d[i][1]) print '\n아래에 목록이 나오는 순서대로 정리됩니다. 순서가 틀린 파일이 있으면 다시 하시기 바랍니다.' for inn in inner_dirnames: if inn!='정리': #해당 내부 폴더가 '정리'폴더가 아니면 print '\n',inn+' 폴더의 사진을 정리중...' p_cnt = 1; inner_file = {} for a,i,all_filenames in os.walk(input_file+'\\'+inn): for f in all_filenames: #내부에서 모든 파일을 가져와서 if f.find('.jpg')!= -1 or f.find('.png')!= -1: #그중 .jpg나 .png가 포함된 사진파일만 가져와서 try: num = int(re.findall('(\d+)',f)[0]) inner_file[num] = f before = num except: inner_file[before+1] = f inner_file = sorted(inner_file.iteritems(), key=itemgetter(0)) print inner_file for j in range(len(inner_file)): if p_cnt%5==0: print print inner_file[j][1] shutil.copy(a+'\\'+inner_file[j][1], input_file+'\\정리\\0000'+str(cnt)+'.jpg') #정리 폴더에 새로 복사. 앞부분의 a는 파일이 들어있는 경로. cnt += 1; p_cnt += 1 print '\n\n정리 완료!\n'
'Python > 2.7 for fun.' 카테고리의 다른 글
네이버 블로그에서 최근에 올라온 음악들 다운받기 1 블로그 구조 분석 (0) | 2015.03.15 |
---|---|
(편의) pyqt를 이용한 gui 만화책 정리 스크립트. (0) | 2015.03.01 |
py2exe, (편의) 티스토리에 맞는 파이썬 소스코드 변환기 (0) | 2015.02.23 |
gui 멀티쓰레드 채팅 서버, 클라이언트 (0) | 2014.12.22 |
사칙연산 계산 서버, 클라이언트 (0) | 2014.10.03 |