My Drive

pythonchallenge #05 - pickle 본문

writeup

pythonchallenge #05 - pickle

sunnyeo.park 2014. 12. 2. 23:38

# 다섯 번째 문제

발음해라?



소스를 보니 아래와 같았다.

peak hell과 비슷한 소리? 



우선 banner.p를 들어가 보니 아래와 같았다.

아, peak hell은 피클(pickle)이라는 힌트를 주려는 것 같다. python에 pickle이라는 모듈이 있고, 아래는 자료를 pickle을 이용해 dump했을 때 파일에 써지는 형태이다(S, p1, p2 같은 것들이 보이면.... )



파일을 읽어서 처리해야 할 듯 하므로 파일로 저장해준다.



pickle모듈은 간단히 아래와 같이 사용한다. 자료를 파일에 쓸때는 dump, 파일을 자료로 쓸때는 load를 사용.


결과는 아래와 같이 나온다. 빈칸 95, 빈칸 14, # 5, .... 앞은 문자 뒤는 개수를 의미하는 듯 하다.

튜플들의 리스트 여러개로 이루어져 있으므로 적절히 파싱해서 빈칸을 95번 빈칸을 14번 #을 5번, ... 출력하게끔 코드를 고쳐보았다.


수정된 코드는 다음과 같다.


결과는 아래와 같다.


파이썬에서 print를 줄바꿈 없이 하기 위해서는 끝에 ,를 쓰는 방법이 있다. 하지만 위와 같이 빈칸은 없어지지 않는다.

아래와 같은 방법은 빈칸까지 없앨 수 있는 방법이다.


그러므로

http://www.pythonchallenge.com/pc/def/channel.html

위와같이 url을 바꿔주면 다음단계로 넘어간다.


※ pickle

주로 복잡한 자료를 파일에 쓰고 읽을 때 pickle 모듈을 사용한다.

아래와 같이 pickle.dump(obj, file[, protocol]) 함수로 자료를 파일에 쓴다.

>>> users = {'kim':'3kid9', 'sun80':'393948', 'ljm':'py90390'}
>>> f = open('d:/python21/exam/users.txt', 'w')
>>> import pickle
>>> pickle.dump(users, f)
>>> f.close()

파일에는 아래와 같이 쓰여지게 된다.

(dp0
S'ljm'
p1
S'py90390'
p2
sS'kim'
p3
S'3kid9'
p4
sS'sun80'
p5
S'393948'
p6
s.

역으로 원래 자료를 돌리기 위해서는 pickle.load(file) 함수를 사용한다.
>>> f = open('d:/python21/exam/users.txt')
>>> a = pickle.load(f)
>>> print a
{'sun80': '393948', 'kim': '3kid9', 'ljm': 'py90390'}



'writeup' 카테고리의 다른 글

pythonchallenge #07 - image  (0) 2014.12.09
pythonchallenge #06 - zipfile  (0) 2014.12.03
pythonchallenge #04 - html  (0) 2014.12.01
pythonchallenge #03  (0) 2014.11.30
pythonchallenge #02 - 파일 입출력  (0) 2014.11.28
Comments