파이썬

6주차, 직렬화(인코딩) pickle, json

호놀롤루 2022. 1. 28. 15:38

직렬화란

객체를 연속적인 데이터로 변환하는 것, 그래서 이름이 직렬화(Serialize 시리즈라고 생각하면 됨)

 

객체를 컴퓨터에 저장하기 위해서는 직렬화가 필요 (클래스나 인스턴스 같은 개념이 많은데 컴퓨터는

0과 1밖에 못읽는다 그래서 컴퓨터가 알아듣는 바이트화 하는 게 직렬화)

 

"띠이용".encode("utf-8") // bytes로 인코딩

"띠이용".encode("utf-8").decode() // 원래대로

 

파이썬에서 객체를 직렬화하는 모듈은 pickle이다. (import 해야됨)

・ pickle.dump(출력할 객체, 파일 객체) : 파일 객체에 출력할 객체를 저장

 

・ with open('text.txt', 'wb') as f:

    pickle.dump([1, 2, 3, 4], f)      // w가 아닌 wb로 해야 됨

 

・ pickle.dumps(출력할 객체) : 출력할 객체를 바이트 형태로 변환 

 

・ pickle.dumps([1, 2, 3, 4])

 

이 객체를 다시 원래대로 돌리는 방법은

・ pickle.load(파일객체) : pickle을 통해 바이트화 된 객체를 다시 원본의 모습으로 반환

 

・ pickle.loads(바이트 객체): pickle을 통해 바이트화 된 객체를 다시 원본의 모습으로 반환

 

・ pickle.loads(pickle.dumps([1, 2, 3, 4]))

 

 

Json 모듈

Json은 pickle과는 또 다른 직렬화 방식으로, 서로 다른 언어로 작성된 프로그램에서 통신할 때

쓸 수도 있고, 인간이 보기에 알아보기 편한 형식으로 저장할 수 있기에 널리 사용된다.

 

단 json으로 직렬화 할 수 있는 객체는 한정되어 있다.

・ import json

json.dumps([1, 2, 3, {'4': 5, '6': 7}])

// String 형식으로 반환

 

・ import json

json.loads('[1, 2, 3, {'4': 5, '6': 7}]')

// String 형식의 데이터를 list와 dictionary 등으로 복원

 

・ import json

with open('test.txt', 'w') as f:

    json.dump([1, 2, 3, {'4': 5, '6': 7}], f)

// 파일에 json화된 객체를 저장

 

・ import json

with open('test.txt', 'r') as f:

    json.load(f)

// json화된 데이터를 list, dictionary 등으로 복원