3. 파이썬 객체를 파일에 저장하기, 가져오기
- 파이썬은 객체를 파일에 저장하는 pickle 모듈을 제공한다.
- 파이썬 객체를 파일에 저장하는 과정을 피클링(pickling)이라고 하고, 파일에서 객체를 읽어오는 과정을 언피클링(unpickling)이라고 한다.
3-1. 파이썬 객체를 파일에 저장하기
- 피클링은 pickle 모듈의 dump 메서드를 사용한다.
import pickle name = 'james' age = 17 address = '서울시 서초구 반포동' scores = {'korean': 90, 'english': 95, 'mathematics': 85, 'science': 82} with open('james.p', 'wb') as file: # james.p 파일을 바이너리 쓰기 모드(wb)로 열기 pickle.dump(name, file) pickle.dump(age, file) pickle.dump(address, file) pickle.dump(scores, file)
- 소스 코드를 실행하면 .py 파일이 있는 폴더에 jame.p 파일이 생성되고, 여기서는 확장자로 pickle의 p를 사용했지만 다른 확장자를 사용해도 된다.
- 특히 pickle.dump로 객체(값)를 저장할 때는 open('james.p', 'wb') 와 같이 파일 모드를 'wb'로 지정해야 한다.(b는 컴퓨터로 처리하는 파일 형식인 binary 파일)
3-2. 파일에서 파이썬 객체 읽기
- 언피클링은 pickle 모듈의 load를 사용하고, 언피클링을 할 때는 반드시 파일 모드를 바이너리 읽기 모드 'rb'로 지정해야 한다.
import pickle with open('james.p', 'rb') as file: # james.p 파일을 바이너리 읽기 모드(rb)로 열기 name = pickle.load(file) age = pickle.load(file) address = pickle.load(file) scores = pickle.load(file) print(name) print(age) print(address) print(scores) # 실행 결과 james 17 서울시 서초구 반포동 {'korean': 90, 'english': 95, 'mathematics': 85, 'science': 82}
- 앞에서 jame.p 파일을 저장할 때 pickle.dump를 네 번 사용했던 것 처럼 파일에서 객체(값)를 가져올 때도 pickle.load를 네 번 사용해야 하고, 저장한 순서대로 값을 가져와야 한다.
※ 파일 모드에 대하여
- 파일 모드는 조합에 따라 여러 종류가 있고, 읽기 'r', 쓰기 'w' 이외에 추가 'a', 배타적 생성 'x'도 있다.
- 추가 모드 'a'는 이미 있는 파일에서 끝에 새로운 내용을 추가할 때 사용한다.
- 배타적 생성모드 'x'는 파일이 이미 있으면 에러(FileExistsError)를 발생시키고 없으면 파일을 만든다.
- 파일의 형식을 함께 지정할 수 있는 텍스트 모드 't'와 바이너리 모드 'b'가 있다.
- 파일 형식과 읽기, 쓰기 모드를 조합한 텍스트 모드 'rt', 'wt'는 파일을 텍스트 모드로 연다.
- 텍스트 모드는 생략할 수 있어서 그냥 'r', 'w'도 텍스트 모드이다.
- 바이너리 모드 'rb', 'wb' 등은 피클링을 사용하거나 바이너리 데이터를 직접 저장할 때 사용한다.
- '+'는 파일을 읽기/쓰기 모드로 연다.
- '+'모드는 'r+t', 'w+t', 'r+', 'w+', 'r+b', 'w+b' 등으로 조합할 수 있으며 읽기/쓰기 모드인 것은 같지만 파일 처리 방법이 조금씩 다르다.
'Python 코딩도장' 카테고리의 다른 글
파이썬 코딩도장 Unit 28 정리(2) - N-gram 만들기 (0) | 2022.02.18 |
---|---|
파이썬 코딩도장 Unit 28 정리(1) - 회문 판별하기 (0) | 2022.02.17 |
파이썬 코딩도장 Unit 27 정리(2) - 문자열 여러 줄을 파일에 쓰고 읽기 (0) | 2022.02.15 |
파이썬 코딩도장 Unit 27 정리(1) - 파일에 문자열 쓰기, 읽기 (0) | 2022.02.14 |
파이썬 코딩도장 Unit 26 정리(5) - 반복문, 세트 표현식 사용 (0) | 2022.02.11 |