ko ko ko en en en ko ko cs zh ko ko ko ko ko ko ko ko ko ko ko en ko ko ko ko ko ko en ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko fr ko ko ko ko fr ko ko ko en en ko en zh en en
파이썬 코딩 도장: 27.3 파이썬 객체를 파일에 저장하기, 가져오기
◀ 27.2 문자열 여러 줄을 파일에 쓰기, 읽기27.4 퀴즈 ▶︎
파일에서 문자열만 읽고 쓴다면 조금 불편하겠죠? 파이썬은 객체를 파일에 저장하는 pickle 모듈을 제공합니다.
다음과 같이 파이썬 객체를 파일에 저장하는 과정을 피클링(pickling)이라고 하고, 파일에서 객체를 읽어오는 과정을 언피클링(unpickling)이라고 합니다.
▼ 그림 27-3 피클링과 언피클링
그럼 파이썬 객체를 파일에 저장하는 피클링을 해보겠습니다. 피클링은 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 파일이 있는 폴더에 james.p 파일이 생성됩니다. 여기서는 확장자를 pickle의 p를 사용했지만 다른 확장자를 사용해도 상관없습니다.
특히 pickle.dump로 객체(값)를 저장할 때는 open('james.p', 'wb')와 같이 파일 모드를 'wb'로 지정해야 합니다. b는 바이너리(binary)를 뜻하는데, 바이너리 파일은 컴퓨터가 처리하는 파일 형식입니다. 따라서 메모장 같은 텍스트 편집기로 열어도 사람이 알아보기 어렵습니다.
참고로 지금까지 사용한 .txt 파일은 사람이 알아보기 쉽도록 만든 파일 형식이며 텍스트(text) 파일이라고 부릅니다.
27.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}
앞에서 james.p 파일을 저장할 때 pickle.dump를 네 번 사용했습니다. 마찬가지로 파일에서 객체(값)를 가져올 때도 pickle.load를 네 번 사용해야 합니다. 즉, name, age, address, scores 순으로 저장했으므로 가져올 때도 같은 순서로 가져오면 됩니다.
지금까지 파일을 읽고 쓰는 방법을 배웠습니다. 파일 처리는 프로그램을 만들 때 자주 사용되므로 사용 방법을 정확히 익히는 것이 좋습니다.
참고 | 다른 파일 모드는 없나요?
사실 파일 모드는 조합에 따라 여러 종류가 있습니다. 읽기 'r', 쓰기 'w' 이외에 추가 'a', 배타적 생성 'x'도 있습니다. 추가 모드는 이미 있는 파일에서 끝에 새로운 내용을 추가할 때 사용하고, 배타적 생성 모드는 파일이 이미 있으면 에러(FileExistsError)를 발생시키고 없으면 파일을 만듭니다. 'x'는 베타적 생성(exclusive creation)의 x입니다
또한, 파일의 형식도 함께 지정할 수 있는데, 텍스트 모드 't'와 바이너리 모드 'b'가 있습니다. 이 파일 형식과 읽기, 쓰기 모드를 조합한 텍스트 모드 'rt', 'wt'는 파일을 텍스트 모드로 엽니다. 특히 텍스트 모드는 생략할 수 있어서 그냥 'r', 'w'도 텍스트 모드입니다. 그리고 바이너리 모드 'rb', 'wb' 등은 피클링을 사용하거나 바이너리 데이터를 직접 저장할 때 사용합니다.
그다음에 '+'가 있는데 파일을 읽기/쓰기 모드로 엽니다. 이 모드는 'r+t', 'w+t', 'r+', 'w+', 'r+b', 'w+b' 등으로 조합할 수 있으며 읽기/쓰기 모드인 것은 같지만 파일 처리 방법이 조금씩 다릅니다.
지금까지 나온 파일 모드 조합을 그림으로 정리하면 다음과 같은 구조가 됩니다.
▼ 그림 27-4 파일 모드 조합
◀ 27.2 문자열 여러 줄을 파일에 쓰기, 읽기27.4 퀴즈 ▶︎
Unit 1. 소프트웨어 교육과 파이썬
Unit 2. 파이썬 설치하기
Unit 3. Hello, world!로 시작하기
Unit 4. 기본 문법 알아보기
Unit 5. 숫자 계산하기
Unit 6. 변수와 입력 사용하기
Unit 7. 출력 방법 알아보기
Unit 8. 불과 비교, 논리 연산자 알아보기
Unit 9. 문자열 사용하기
Unit 10. 리스트와 튜플 사용하기
Unit 11. 시퀀스 자료형 활용하기
Unit 12. 딕셔너리 사용하기
Unit 13. if 조건문으로 특정 조건일 때 코드 실행하기
Unit 14. else를 사용하여 두 방향으로 분기하기
Unit 15. elif를 사용하여 여러 방향으로 분기하기
Unit 16. for 반복문으로 Hello, world! 100번 출력하기
Unit 17. while 반복문으로 Hello, world! 100번 출력하기
Unit 18. break, continue로 반복문 제어하기
Unit 19. 계단식으로 별 출력하기
Unit 20. FizzBuzz 문제
Unit 21. 터틀 그래픽스로 그림 그리기
Unit 22. 리스트와 튜플 응용하기
Unit 23. 2차원 리스트 사용하기
Unit 24. 문자열 응용하기
Unit 25. 딕셔너리 응용하기
Unit 26. 세트 사용하기
Unit 27. 파일 사용하기
27.1 파일에 문자열 쓰기, 읽기
27.2 문자열 여러 줄을 파일에 쓰기, 읽기
27.3 파이썬 객체를 파일에 저장하기, 가져오기
27.5 연습문제: 파일에서 10자 이하인 단어 개수 세기
27.6 심사문제: 특정 문자가 들어있는 단어 찾기
Unit 28. 회문 판별과 N-gram 만들기
Unit 29. 함수 사용하기
Unit 30. 함수에서 위치 인수와 키워드 인수 사용하기
Unit 31. 함수에서 재귀호출 사용하기
Unit 32. 람다 표현식 사용하기
Unit 33. 클로저 사용하기
Unit 34. 클래스 사용하기
Unit 35. 클래스 속성과 정적, 클래스 메서드 사용하기
Unit 36. 클래스 상속 사용하기
Unit 37. 두 점 사이의 거리 구하기
Unit 38. 예외 처리 사용하기
Unit 39. 이터레이터 사용하기
Unit 40. 제너레이터 사용하기
Unit 41. 코루틴 사용하기
Unit 42. 데코레이터 사용하기
Unit 43. 정규표현식 사용하기
Unit 44. 모듈과 패키지 사용하기
Unit 45. 모듈과 패키지 만들기
Unit 46. 실전예제: 웹의 데이터로 그래프 그리기
C 언어 코딩 도장
- 이 사이트에 실린 모든 내용, 디자인, 이미지, 편집 구성의 저작권은 (주)도서출판 길벗과 지은이에게 있습니다.
- 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다.
- 책의 내용을 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다.
- 링크, SNS 공유는 허용합니다.
서울시 마포구 서교동 월드컵로 10길 56 (서울시 마포구 서교동 467-9)
Copyright © 2016-2021 Coding Dojang