본문 바로가기
Python 코딩도장

파이썬 코딩도장 Unit 27 정리(3) - 파이썬 객체를 파일에 저장하고 가져오기

by chanfficial 2022. 2. 16.

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' 등으로 조합할 수 있으며 읽기/쓰기 모드인 것은 같지만 파일 처리 방법이 조금씩 다르다.
    파일 모드 조합