티스토리 뷰

Python

Python, pickle

hwangyoungjae 2016. 5. 17. 13:53
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

일반 텍스트를 파일로저장할때는 파일입출력을 이용하면 된다.

하지만 리스트나 클래스같은 텍스트가 아닌 자료형은 일반적인 파일입출력을방법으로는 데이터를 저장하거나 불러올수 없다

따라서 파이썬에서는 이와같은 텍스트이외의 자료형을 파일로저장하기 위하여 pickle이라는 모듈을 제공한다.

아래의 예를 보도록 하자

>>> LIST=['a','b','c']

>>> with open('test.txt','w') as f:

             f.write(LIST)

 

Traceback (most recent call last):

  File "<pyshell#5>", line 2, in <module>

    f.write(LIST)

TypeError: must be str, not list

텍스트를 파일에 저장하는 방법으로 리스트를 저장하려면 TypeError를 발생한다.

pickle모듈을 사용하여 저장해보도록 하겠다.

>>> import pickle

>>> LIST=['a','b','c']

>>> with open('test.txt','wb') as f:

             pickle.dump(LIST,f)

 

>>> with open('test.txt','rb') as f:

             data=pickle.load(f)

 

>>> data

['a', 'b', 'c']

위처럼 pickle모듈을 이용하면 원하는 데이터를 자료형의 변경없이 파일로저장하여 그래도 불러들일수 있도록 해주는것이 바로 pickle모듈이다.

 

pickle을 이용하여 파일로 저장할때는 dump()를 사용하며다시 읽어들일때는 load()를 사용한다.

사용형식 : pickle.dump(데이터,파일)

사용형식 : 변수=pickle.load(파일)

 

※ 주의할점은 pickle로 데이터를 저장하거나 불러올때는 파일을 바이트형식으로 읽거나 써야 한다는것이다.

file = open('text.txt','wb')

file = open('text.txt','rb')

 

pickle로 저장할수 있는 대상은 파이썬객체라면 거의 모두 가능하다.

기본자료형은 물론이고 아래와 같이 사용자가 정의한 클래스 객체도 pickle이 가능하다.

>>> import pickle

>>> class test:

             var='data'

 

>>> a=test()

>>> f=open('test.pickle','wb')

>>> pickle.dump(a,f)

>>> f.close()

>>> f=open('test.pickle','rb')

>>> b=pickle.load(f)

>>> f.close()

>>> b.var

'data'

위 예제에서 pickle모듈의 dump() load()함수를 이용하여 test라는 클래스의 객체를 파일에 저장하고 불러오는것을 볼수 있다.

그러나 test클래스가 정의되지 않은 상태에서는 아래와 같이 load를 할수 없다는 사실에 유의해야 한다.

>>> del test #test클래스 제거

>>> f=open('test.pickle','rb')

>>> c=pickle.load(f)

Traceback (most recent call last):

  File "<pyshell#137>", line 1, in <module>

    c=pickle.load(f)

AttributeError: 'module' object has no attribute 'test'

 

 

참조 : 빠르게 활용하는 파이썬프로그래밍

 

'Python' 카테고리의 다른 글

Python,module datetime [날짜시간]  (0) 2016.05.17
Python,module time [시간]  (0) 2016.05.17
Python, 모듈 사용하기  (0) 2016.05.17
Python, 클래스(Class) - 상속  (0) 2016.05.09
Python, 클래스(Class) - 연산자중복정의  (0) 2016.05.09
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함