반응형

 

사전 객체를 문자열로 바꾸거나 그 문자열을 사전 데이터로 변환하는 다섯 가지 예제

 

글. 수알치 오상문 

 

보너스로 피클을 이용하여 파일에 저장했다가 읽어오는 예제도 추가했습니다.

다음은 예제 코드입니다.

 

dict_data = {"1":"하나", "2":"둘", "3": {"기수":"셋", "서수":"삼"}, }
print("원래 사전 데이터")
print(type(dict_data), dict_data)

# 방법 1 : str + eval
print("\n방법 1 : str + eval")
str_data = str(dict_data)
print(type(str_data), str_data)
dict_data2 = eval(str_data)
print(type(dict_data2), dict_data2)

# 방법 2-1 : json
import json

print("\n방법 2-1 : json.dumps, json.loads")
str_data = json.dumps(dict_data)
print(type(str_data), str_data)
dict_data2 = json.loads(str_data)
print(type(dict_data2), dict_data2)

# 방법 2-2 : ujson (UltraJSON)
# pip install ujson
import ujson

print("\n방법 2-2 : ujson.dumps, ujson.loads")
str_data = ujson.dumps(dict_data)
print(type(str_data), str_data)
dict_data2 = ujson.loads(str_data)
print(type(dict_data2), dict_data2)

# 방법 3 : str + ast
import ast

print("\n방법 3 : str + ast.literal_eval")
str_data = str(dict_data)
print(type(str_data), str_data)
dict_data2 = ast.literal_eval(str_data)
print(type(dict_data2), dict_data2)

# 방법 4 : pickle
import pickle

print("\n방법 4 : pickle.dump, pickle.load")
str_data = pickle.dumps(dict_data)  # bytes 문자열
print(type(str_data), str_data)
dict_data2 = pickle.loads(str_data)
print(type(dict_data2), dict_data2)

# [참고] 피클 파일에 저장하고 읽어오기
# import pickle  # 원래 지원하던 피클 모듈
import _pickle as pickle # python 3부터 C로 만들어진 빠른 피클 이용 가능

print("\n참고: pickle or _pickle 파일 저장/읽기")
dict_data = {"1":"하나", "2":"둘", "3": {"기수":"셋", "서수":"삼"}, }

with open('dump.pickle', 'wb') as f:
    pickle.dump(dict_data, f)  # 피클 파일에 저장

with open('dump.pickle', 'rb') as f:
    rev = pickle.load(f)  # 피클 파일 읽기
    print(type(rev), rev)

 

[실행 결과] -----------------------------------------------

 

원래 사전 데이터
<class 'dict'> {'1': '하나', '2': '둘', '3': {'기수': '셋', '서수': '삼'}}

방법 1 : str + eval
<class 'str'> {'1': '하나', '2': '둘', '3': {'기수': '셋', '서수': '삼'}}
<class 'dict'> {'1': '하나', '2': '둘', '3': {'기수': '셋', '서수': '삼'}}

방법 2-1 : json.dumps, json.loads
<class 'str'> {"1": "\ud558\ub098", "2": "\ub458", "3": {"\uae30\uc218": "\uc14b", "\uc11c\uc218": "\uc0bc"}}
<class 'dict'> {'1': '하나', '2': '둘', '3': {'기수': '셋', '서수': '삼'}}

방법 2-2 : ujson.dumps, ujson.loads
<class 'str'> {"1":"\ud558\ub098","2":"\ub458","3":{"\uae30\uc218":"\uc14b","\uc11c\uc218":"\uc0bc"}}
<class 'dict'> {'1': '하나', '2': '둘', '3': {'기수': '셋', '서수': '삼'}}

방법 3 : str + ast.literal_eval
<class 'str'> {'1': '하나', '2': '둘', '3': {'기수': '셋', '서수': '삼'}}
<class 'dict'> {'1': '하나', '2': '둘', '3': {'기수': '셋', '서수': '삼'}}

방법 4 : pickle.dump, pickle.load
<class 'bytes'> b'\x80\x04\x95B\x00\x00\x00\x00\x00\x00\x00}\x94(\x8c\x011\x94\x8c\x06\xed\x95\x98\xeb\x82\x98\x94\x8c\x012\x94\x8c\x03\xeb\x91\x98\x94\x8c\x013\x94}\x94(\x8c\x06\xea\xb8\xb0\xec\x88\x98\x94\x8c\x03\xec\x85\x8b\x94\x8c\x06\xec\x84\x9c\xec\x88\x98\x94\x8c\x03\xec\x82\xbc\x94uu.'
<class 'dict'> {'1': '하나', '2': '둘', '3': {'기수': '셋', '서수': '삼'}}

참고: pickle or _pickle 파일 저장/읽기
<class 'dict'> {'1': '하나', '2': '둘', '3': {'기수': '셋', '서수': '삼'}}

반응형

+ Recent posts