250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 아이엠어바텐더
- map
- sql
- 프로젝트
- date_format
- 슬라이싱
- 코딩테스트 연습
- count
- 파이썬
- python
- 파이썬 몫
- 백준
- 프로그래머스
- 파이썬 슬라이싱
- html
- css
- Python3
- 단어 공부
- YOLOv5
- Len
- where
- GIT
- 설계
- Django
- List Comprehension
- SQL 고득점 Kit
- pcce 기출문제
- Join
- ORDER BY
- 데이터
Archives
- Today
- Total
nan + nan = 2nan
[Python] pickle 파일 다루기 본문
728x90
Pickle?
- 텍스트 형태로 파일을 저장하는 것이 아닌, 객체 자체를 바이너리 형태로 저장하는 형식
파이썬에서 사용하는 딕셔너리, 리스트, 클래스 등의 자료형을 변환 없이 그대로 파일로 저장하고 이를 불러올 때 사용하는 모듈
Pickling
- 파이썬 객체를 pickle 파일로 저장 (pickle.dump())
Unpickling
- pickle 파일에서 객체를 읽어오는 과정 (pickle.load())
코드 예시
import pickle # 모듈 임포트
# 저장할 딕셔너리 데이터 생성
data = {}
data[1] = {'no': 1, 'subject': '안녕 피클', 'content': '피클은 매우 간단합니다.'}
# 딕셔너리를 pickle 파일로 저장
with open('data.p', 'wb') as f: # 'data.p' 파일에 data를 dump() 메소드를 사용하여 저장
pickle.dump(data, f)
# 저장한 pickle 파일 불러오기
with open("data.p", 'rb') as f:
data = pickle.load(f)
print(data)
# 결과
{1: {'no': 1, 'subject': '안녕 피클', 'content': '피클은 매우 간단합니다.'}}
다음과 같이 dump 메소드를 사용하여 저장하고, load 메소드를 사용하여 불러온다.
저장 시, 바이너리 데이터로 저장하기 때문에 우리 눈으로 읽을 수 있는 데이터 형태가 아니다.
장점
- 사용하는 이유 중 하나는 속도 측면
- 텍스트 파일을 읽을 때 필요한 부분들을 전체에서 파싱해서 가져와야 하지만,
pickle 파일은 이미 필요한 형태로 저장이 되어 있기 때문에 훨씬 빠르다.
- 텍스트 파일을 읽을 때 필요한 부분들을 전체에서 파싱해서 가져와야 하지만,
단점
- 불안전성
- 검증되지 않은 pickle data를 Unpickling하다 임의의 코드가 실행될 가능성(RCE, 원격코드실행)이 존재함
- 버전 호환성
- 만약 다른 사람에게 pickle 파일을 만들어 보내줬는데, 그 사람의 pickle 모듈 버전과 나의 pickle 모듈 버전이 다를 경우
파일이 작동하지 않을 가능성이 크다고 한다.
- 만약 다른 사람에게 pickle 파일을 만들어 보내줬는데, 그 사람의 pickle 모듈 버전과 나의 pickle 모듈 버전이 다를 경우
이전에 첫 프로젝트 당시, pickle 파일로 array 값을 관리를 했었는데 지금 생각해보면 아마 속도 측면에서 해당 파일 형식을 택한게 아닌가 싶다.
실제 서비스를 적용하는 것이 아니기 때문에, 보안 측면의 문제보다 당장의 퍼포먼스가 중요해서 그랬던 것 같은데, 보통 나는 pickle data보다 json 형식의 data를 많이 사용해서 잘 모르겠다.
나중에 json에 대한 글을 쓰면서, pickle과의 차이점도 분석해봐야겠다.
'Python' 카테고리의 다른 글
[Python] List(리스트) (0) | 2023.05.07 |
---|---|
[Python] break, continue, pass 차이 (0) | 2023.04.27 |
[Python] 파이썬 가상 환경 실행 (0) | 2023.03.05 |
[Python] 0719_파이썬 클린 코드 (0) | 2022.07.19 |
[오류해결] 파일 숫자 순으로 저장 후 읽을 시 순서 문제 (0) | 2022.07.08 |
Comments