파이썬 사전 저장
.csv 파일을 사용하여 Python에서 데이터를 가져오고 내보내는 데 익숙하지만 이에 대한 분명한 과제가 있습니다. json 또는 pck 파일에 사전 (또는 사전 세트)을 저장하는 간단한 방법에 대한 조언이 있습니까? 예를 들면 다음과 같습니다.
data = {}
data ['key1'] = "keyinfo"
data ['key2'] = "keyinfo2"
이것을 저장하는 방법과 다시로드하는 방법을 알고 싶습니다.
피클 저장 :
try:
import cPickle as pickle
except ImportError: # python 3.x
import pickle
with open('data.p', 'wb') as fp:
pickle.dump(data, fp, protocol=pickle.HIGHEST_PROTOCOL)
인수 에 대한 추가 정보 는 피클 모듈 설명서 를 참조하십시오 protocol
.
피클 로드 :
with open('data.p', 'rb') as fp:
data = pickle.load(fp)
JSON 저장 :
import json
with open('data.json', 'w') as fp:
json.dump(data, fp)
sort_keys
또는 좋은 indent
결과를 얻으려면 추가 인수 를 제공하십시오. sort_keys 인수 는 키를 알파벳순으로 정렬하고 들여 쓰기 는 데이터 구조를 indent=N
공백으로 들여 씁니다 .
json.dump(data, fp, sort_keys=True, indent=4)
JSON 로드 :
with open('data.json', 'r') as fp:
data = json.load(fp)
최소한의 예, 파일에 직접 쓰는 것 :
import json
json.dump(data, open(filename, 'wb'))
data = json.load(open(filename))
또는 안전하게 개 / 폐 :
import json
with open(filename, 'wb') as outfile:
json.dump(data, outfile)
with open(filename) as infile:
data = json.load(infile)
파일 대신 문자열로 저장하려면 다음을 수행하십시오.
import json
json_str = json.dumps(data)
data = json.loads(json_str)
가속화 된 패키지 ujson도 참조하십시오. https://pypi.python.org/pypi/ujson
import ujson
with open('data.json', 'wb') as fp:
ujson.dump(data, fp)
파일에 쓰려면 :
import json
myfile.write(json.dumps(mydict))
파일에서 읽으려면 :
import json
mydict = json.loads(myfile.read())
myfile
dict을 저장 한 파일의 파일 객체입니다.
직렬화 후 다른 프로그램의 데이터가 필요하지 않은 경우 shelve
모듈을 강력히 권장합니다 . 그것을 영구 사전으로 생각하십시오.
myData = shelve.open('/path/to/file')
# check for values.
keyVar in myData
# set values
myData[anotherKey] = someValue
# save the data for future use.
myData.close()
pickle
또는에 대한 대안이 필요한 경우을 json
사용할 수 있습니다 klepto
.
>>> init = {'y': 2, 'x': 1, 'z': 3}
>>> import klepto
>>> cache = klepto.archives.file_archive('memo', init, serialized=False)
>>> cache
{'y': 2, 'x': 1, 'z': 3}
>>>
>>> # dump dictionary to the file 'memo.py'
>>> cache.dump()
>>>
>>> # import from 'memo.py'
>>> from memo import memo
>>> print memo
{'y': 2, 'x': 1, 'z': 3}
을 사용 klepto
하면을 사용한 serialized=True
경우 사전이 memo.pkl
일반 텍스트 대신 절인 사전 으로 작성되었습니다 .
당신은 klepto
여기에 갈 수 있습니다 : https://github.com/uqfoundation/klepto
dill
is probably a better choice for pickling then pickle
itself, as dill
can serialize almost anything in python. klepto
also can use dill
.
You can get dill
here: https://github.com/uqfoundation/dill
The additional mumbo-jumbo on the first few lines are because klepto
can be configured to store dictionaries to a file, to a directory context, or to a SQL database. The API is the same for whatever you choose as the backend archive. It gives you an "archivable" dictionary with which you can use load
and dump
to interact with the archive.
This is an old topic, but for completeness, we should include ConfigParser and configparser which are part of the standard library in Python 2 and 3, respectively. This module reads and writes to a config/ini file and (at least in Python 3) behaves in a lot of ways like a dictionary. It has the added benefit that you can store multiple dictionaries into separate sections of your config/ini file and recall them. Sweet!
Python 2.7.x example.
import ConfigParser
config = ConfigParser.ConfigParser()
dict1 = {'key1':'keyinfo', 'key2':'keyinfo2'}
dict2 = {'k1':'hot', 'k2':'cross', 'k3':'buns'}
dict3 = {'x':1, 'y':2, 'z':3}
# make each dictionary a separate section in config
config.add_section('dict1')
for key in dict1.keys():
config.set('dict1', key, dict1[key])
config.add_section('dict2')
for key in dict2.keys():
config.set('dict2', key, dict2[key])
config.add_section('dict3')
for key in dict3.keys():
config.set('dict3', key, dict3[key])
# save config to file
f = open('config.ini', 'w')
config.write(f)
f.close()
# read config from file
config2 = ConfigParser.ConfigParser()
config2.read('config.ini')
dictA = {}
for item in config2.items('dict1'):
dictA[item[0]] = item[1]
dictB = {}
for item in config2.items('dict2'):
dictB[item[0]] = item[1]
dictC = {}
for item in config2.items('dict3'):
dictC[item[0]] = item[1]
print(dictA)
print(dictB)
print(dictC)
Python 3.X example.
import configparser
config = configparser.ConfigParser()
dict1 = {'key1':'keyinfo', 'key2':'keyinfo2'}
dict2 = {'k1':'hot', 'k2':'cross', 'k3':'buns'}
dict3 = {'x':1, 'y':2, 'z':3}
# make each dictionary a separate section in config
config['dict1'] = dict1
config['dict2'] = dict2
config['dict3'] = dict3
# save config to file
f = open('config.ini', 'w')
config.write(f)
f.close()
# read config from file
config2 = configparser.ConfigParser()
config2.read('config.ini')
# ConfigParser objects are a lot like dictionaries, but if you really
# want a dictionary you can ask it to convert a section to a dictionary
dictA = dict(config2['dict1'] )
dictB = dict(config2['dict2'] )
dictC = dict(config2['dict3'])
print(dictA)
print(dictB)
print(dictC)
console output
{'key2': 'keyinfo2', 'key1': 'keyinfo'}
{'k1': 'hot', 'k2': 'cross', 'k3': 'buns'}
{'z': '3', 'y': '2', 'x': '1'}
contents of config.ini
[dict1]
key2 = keyinfo2
key1 = keyinfo
[dict2]
k1 = hot
k2 = cross
k3 = buns
[dict3]
z = 3
y = 2
x = 1
If save to a json file, the best and easiest way of doing this is:
import json
with open("file.json", "wb") as f:
f.write(json.dumps(dict).encode("utf-8"))
참고URL : https://stackoverflow.com/questions/7100125/storing-python-dictionaries
'Programing' 카테고리의 다른 글
C #을 사용하여 CSV 파일 읽기 (0) | 2020.06.07 |
---|---|
System.Net.HttpClient get에 대한 쿼리 문자열 작성 (0) | 2020.06.07 |
Swift를 사용하여 텍스트를 클립 보드 / 칠판에 복사하는 방법 (0) | 2020.06.07 |
텍스트 편집에서 android : ems 속성은 무엇입니까? (0) | 2020.06.06 |
정렬 로직을 모델, 뷰 또는 컨트롤러에 배치해야합니까? (0) | 2020.06.06 |