Python/2.7 information

rarfile module ( DareYourMind programming 3 )

qkqhxla1 2015. 1. 23. 18:30

docs : http://rarfile.readthedocs.org/en/latest/api.html


download : https://pypi.python.org/pypi/rarfile/


그리고 압축을 풀 unrar : 

unrarw32.exe


rarfile을 커맨드라인으로 설치한다. 다운받은 rarfile경로로 들어가서. python.exe setup.py install.


압축을 풀 unrar을 실행시켜서 UnRAR.exe파일이 나오면 그걸 원하는 경로에 갖다둔다.(나같은경우는 C:\의 


개인폴더.) rarfile이 설치된 경로로 들어간다.(Libs에서 rarfile.py를 찾아보면 나옴.) rarfile.py파일을 열어서


#: 'unrar', 'rar' or full path to either one

UNRAR_TOOL = "unrar" 이런 라인을 


#: 'unrar', 'rar' or full path to either one

UNRAR_TOOL = "C:\\Users\\Ko\\UnRAR.exe"


이렇게 바꿔준다. 경로는 내가 UnRAR을 넣은 경로. 저 부분은 두부분이 있다. 주석으로 둘러쌓인 부분과


드러난 부분인데, 내가 바꾼 부분은 주석 부분이 아닌 드러난 부분이다.(주석 부분 바꾸면 안 바뀜.)


# -*- encoding: cp949 -*-
import rarfile
filename = 'dolls.rar'
r = rarfile.RarFile(filename)
r.extract('')

처럼 테스트.


3번 압축파일 : 


dolls.rar

이제 3번을 풀어보겠다. 3번은 참 재미있는 문제이다. 문제이름이 Compression tree인데 말 그대로 압축파일의 나무이다. 이게 진짜 나무처럼 2개씩 나뉘어져서 depth가 10칸인가 된다. 깊이가 10칸이면 압축파일이 2^10인 1024개라는 소리이다. 당연히 손으로 풀면 못푼다.(노가다 해봐도되고 ^^;) 위에서 언급한 rarfile을 사용해서 풀었다. 먼저 압축을 전체 다 푼다. 재귀함수를 이용해서 전체 다 풀었다.


# -*- encoding: cp949 -*-
import rarfile
def unrar(rf):
    for f in rf.infolist():
        try:
            print f.filename
            r = rarfile.RarFile('file\\'+f.filename)
            r.extract('file\\')
            unrar(r)
        except:
            pass

rf = rarfile.RarFile('dolls.rar')
rf.extract('file')
unrar(rf)

요런식으로 적으면, 내 파이썬 파일에 file이라는 파일 하나만 만들어주면 거기다가 알아서 압축을 다 푼다. txt파일이 풀면서 알아낸건데 depth가 10칸이 아닌 곳도 있어서 try, except로 예외처리를 해줘야 한다. 이러면 다 풀리는데 여기서 또 .txt확장자만 다 검사하면서 내부 내용이 Nothing here...가 아닌게 있으면 출력하도록 해보면 된다.



# -*- encoding: cp949 -*-
import os

for dirname, dirnames, filenames in os.walk('.'):
    for filename in filenames:
        file = os.path.join(dirname, filename)
        if file.find('txt') != -1:
            f = open(file,'r')
            for l in f:
                if l!='Nothing here...':
                    print l
                    exit(0)

요런식으로 현재 파이썬 폴더 안의 모든 디렉터리,파일 등을 가져와서 txt라는게 존재하면서 내부 내용이 Nothing here...가 아니면 출력한다. 해당 소스를 실행시 주의점은 내가 압축을 푼 file폴더에서만 찾는게 아니라 현재 파이썬 디렉터리 전체에서 txt를 찾으므로 나머지 txt는 확장자를 바꿔주던가 없애던가 해야 한다.