Programing

파이썬 사전 저장

crosscheck 2020. 6. 7. 10:27
반응형

파이썬 사전 저장


.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

반응형