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 |
반응형
'Python > Python Basic' 카테고리의 다른 글
크롤링(Crawling)_02 (API를 이용한 크롤링) (2) | 2017.10.01 |
---|---|
크롤링(Crawling)_01 (WEB, HTTP, Crawling의 개념) (0) | 2017.10.01 |
Decorator_03 (Decorator Chaining, Method decoration, Decorator with parameters) (0) | 2017.09.30 |
Decorator_02 (파라미터가 있는 함수 decorator & 모든 함수에 대한 decorator) (0) | 2017.09.30 |
Decorator_01 (Nested function, Closure) (0) | 2017.09.30 |