본문 바로가기

Python/Python Basic

Pickle 모듈

Pickle

- python 코드 내에서 파일을 만들고 저장하며 불러올 수 있다.

- 일반 텍스트를 파일로 저장할 때는 파일 입출력을 이용한다. 하지만 List나 Class와 같은 텍스트가 아닌 자료형은 일반적인 파일 입출력 방법으로는 데이터를 저장하거나 불러올 수 없다. 파이썬에서는 이와 같은 텍스트 이외의 자료형을 파일로 저장하기 위해 pickle이라는 라이브러리를 제공한다.

- python serialization module

* 객체를 다시 해당 객체로 변환이 가능한 문자열(byte)로 변환

* 네트워크로 전송 혹은 파일에 저장하기 위해 사용 (객체 자체를 네트워크, 파일에 저장 할 수 없기 때문에)

- https://docs.python.org/2/library/pickle.html

- dump : 객체를 byte 형태로 문자열로 저장

  load : 문자열로 저장된 객체를 다시 객체로 변환

 

예제 #1

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
32
33
34
35
import pickle
 
class Person(object):
    
    def __init__(self, data):
        self.data = data
        
    def print_data(self):
        print(self.data)
        
p1 = Person(100# class Person 인스턴스 생성
dumped = pickle.dumps(p1) # 객체 저장
 
print('***** dumped 출력 결과*****')
print(type(dumped))
print(dumped)
 
print()
 
p2 = pickle.loads(dumped)
print('***** p2 출력 결과*****')
print(type(p2))
print(p2.data)
 
 
=================<<실행결과>>=================
 
***** dumped 출력 결과*****
<class 'bytes'>
b'\x80\x03c__main__\nPerson\nq\x00)\x81q\x01}q\x02X\x04\x00\x00\x00dataq\x03Kdsb.'
 
***** p2 출력 결과*****
<class '__main__.Person'>
100
 
cs

 

 

예제 #2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

person_dict = {'barbie' : 1'bob' : 2'cathy' : 3}

 
# 파일에 객체를 저장
# 'save.p'라는 파일명으로 열겠다
# 'wb' : writing to the file (w) & writing in binary mode (b)
pickle.dump(person_dict, open('save.p''wb'))
 
# 파일에서 객체를 읽어옴
p2 = pickle.load(open('save.p''rb'))
print(p2)
 
 
=================<<실행결과>>=================
 
{'barbie'1'bob'2'cathy'3}
cs

 

예제 #3

- s가 붙은게 바로 문자열로 변환 (dump, load)

- s가 안붙은게 파일로 만들어서 가져옴 (dumps, loads)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import pickle
 
persons = {'barbie' : 1'bob' : 2'cathy' : 3}
 
# 객체를 문자열로 저장
string = pickle.dumps(persons)
print(string)
 
# 문자열을 객체로 변환
print(pickle.loads(string))
 
=================<<실행결과>>=================
 
b'\x80\x03}q\x00(X\x06\x00\x00\x00barbieq\x01K\x01X\x03\x00\x00\x00bobq\x02K\x02X\x05\x00\x00\x00cathyq\x03K\x03u.'
{'barbie'1'bob'2'cathy'3}
cs

 

 

반응형