[Python] pickle
string
자료형과 같은 일반 텍스트가 아닌list
,tuple
또는dictionary
같은 자료형은 일반적인 파일 입출력 방법으로 데이터를 저장하거나 불러올 수 없다.
파이썬의pickle
모듈은 텍스트 이외의 자료형을 파일로 저장하도록 해준다.
1. 장점
- 파이썬의 모든 데이터 객체의 저장 및 로드가 가능하다(원하는 데이터를 자료형의 변경없이 그대로 파일로 저장 및 불러오기 가능).
- 원하는 객체 자체를 binary로 저장하고, 필요할 때 로드만 하면 되기 때문에 속도가 빠르다.
pickle
방식은 사람이 읽을 수 없는 형태로 저장되나, 저장이나 전송 측면에서 효율적이다. 반면,JSON
,YAML
방식은 pickle보다는 저장과 전송 측면에서 덜 효율적이지만 가독성이 좋다.
2. 주의점
💡 “The pickle
module is not secure. Only unpickle data you trust.” - by pickle 공식문서
- 악의적으로 생성된 pickle의 경우 안전하지 않으니 신뢰할 수 없는 곳에서 다운받은 pickle 데이터는 unpickling하지 않는 것이 좋다.
- 검증되지 않은 pickle 데이터를 unpickling할 경우 임의의 코드가 실행될 수 있다.
3. 저장 및 로드
- 저장:
pickle.dump(data, file)
pickle
로 데이터를 저장하거나 불러올 때는 파일을binary
파일로 읽고 쓴다(wb
,rb
)
- 로드:
${Variable} = pickle.load(file)
import pickle
data = {
'no': 1,
'subject': 'Hello, pickle',
'content': 'Using pickle is a piece of cake.'
}
# 저장
with open('data.pkl', 'wb') as f:
pickle.dump(data, f)
# 로드
with open('data.pkl', 'rb') as f:
data = pickle.load(f)
- 참고: 만약
pickle
을 쓰지 않고string
type이 아닌 다른 type의 데이터를 일반적인 파일 입출력 방법으로 저장 및 로드한다면 아래와 같이TypeError
가 뜬다.
with open('data.txt', 'w') as f:
f.write(data)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/Users/jinsolkim/Desktop/pickle_practice.ipynb Cell 3 in <cell line: 1>()
1 with open('data.txt', 'w') as f:
----> 2 f.write(data)
TypeError: write() argument must be str, not dict
Leave a comment