Python 사전 저장
CSV 파일을 사용하여 Python에서 데이터를 가져오거나 내보내는 데 익숙하지만 여기에는 분명한 과제가 있습니다.사전(또는 사전 세트)을 JSON 또는 피클 파일에 저장하는 간단한 방법이 있습니까?
예를 들어 다음과 같습니다.
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도 참조하십시오.
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
받아쓰다
하고 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
깨끗한 텍스트 대신 절인 사전으로 사용하세요.
you klepto
여기: https://github.com/uqfoundation/klepto
dill
에는 아마 더 입니다.pickle
자체, 「」로서dill
비단뱀 klepto
사용할 수도 있다dill
.
you dill
여기: https://github.com/uqfoundation/dill
몇 된 것은 문보점보가 있기 입니다.klepto
는 사전을 파일, 디렉토리 컨텍스트 또는 SQL 데이터베이스에 저장하도록 설정할 수 있습니다.API는 백엔드 아카이브로 선택하는 것과 동일합니다.이 사용할 수 가능한"합니다.load
★★★★★★★★★★★★★★★★★」dump
이치노
다른 가 필요 없는, ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★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()
완전성을 위해 Python 2와 3의 표준 라이브러리의 일부인 ConfigParser와 configparser를 각각 포함해야 합니다.이 모듈은 구성/ini 파일을 읽고 쓰며 (적어도 Python 3에서는) 사전과 같은 많은 방식으로 동작합니다.또한 여러 사전을 구성/ini 파일의 개별 섹션에 저장하고 불러올 수 있다는 이점이 있습니다.멋지다!
Python 2.7.x의 예.
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 the configuration
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 the configuration to a file
f = open('config.ini', 'w')
config.write(f)
f.close()
# Read the configuration from a 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의 예.
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 the configuration
config['dict1'] = dict1
config['dict2'] = dict2
config['dict3'] = dict3
# Save the configuration to a file
f = open('config.ini', 'w')
config.write(f)
f.close()
# Read the configuration from a 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)
콘솔 출력
{'key2': 'keyinfo2', 'key1': 'keyinfo'}
{'k1': 'hot', 'k2': 'cross', 'k3': 'buns'}
{'z': '3', 'y': '2', 'x': '1'}
설정 내용ini
[dict1]
key2 = keyinfo2
key1 = keyinfo
[dict2]
k1 = hot
k2 = cross
k3 = buns
[dict3]
z = 3
y = 2
x = 1
JSON 파일에 저장하는 경우 가장 쉽고 좋은 방법은 다음과 같습니다.
import json
with open("file.json", "wb") as f:
f.write(json.dumps(dict).encode("utf-8"))
여러 개의 JSON 개체를 파일에 저장하는 것이 사용 사례였는데, Marty의 답변으로 어느 정도 도움이 되었습니다.그러나 새로운 엔트리가 저장될 때마다 이전 데이터를 덮어쓰게 되므로 사용 사례에 대한 답변이 완벽하지 않았습니다.
파일에 여러 항목을 저장하려면 이전 내용(예: 쓰기 전에 읽기)을 확인해야 합니다.JSON 데이터를 보유하고 있는 일반적인 파일에는list
또는object
뿌리로요.그래서 저는 제 JSON 파일에는 항상list of objects
데이터를 추가할 때마다 먼저 목록을 로드하고 새 데이터를 추가한 후 쓰기 가능한 파일 인스턴스에 다시 덤프합니다(w
):
def saveJson(url,sc): # This function writes the two values to the file
newdata = {'url':url,'sc':sc}
json_path = "db/file.json"
old_list= []
with open(json_path) as myfile: # Read the contents first
old_list = json.load(myfile)
old_list.append(newdata)
with open(json_path,"w") as myfile: # Overwrite the whole content
json.dump(old_list, myfile, sort_keys=True, indent=4)
return "success"
새로운 JSON 파일은 다음과 같습니다.
[
{
"sc": "a11",
"url": "www.google.com"
},
{
"sc": "a12",
"url": "www.google.com"
},
{
"sc": "a13",
"url": "www.google.com"
}
]
메모: 파일명은 필수입니다.file.json
와 함께[]
이 접근방식의 초기 데이터로서
PS: 원래의 질문과는 관계 없습니다만, 이 어프로치는, 우선 엔트리가 이미 존재하는지를 확인해(1개 또는 복수의 키에 근거해), 그 후에 데이터를 추가해 보존하는 것에 의해서도 한층 더 개선될 수 있습니다.
단축 코드
모든 유형의 python 변수(사전 포함)를 각각 한 줄의 코드로 저장하고 로드합니다.
data = {'key1': 'keyinfo', 'key2': 'keyinfo2'}
저장:
pickle.dump(data, open('path/to/file/data.pickle', 'wb'))
로드:
data_loaded = pickle.load(open('path/to/file/data.pickle', 'rb'))
당연한 일이지만, 나는 그것을 짧게 하려고 하기 전에 꽤 오랫동안 맨 위의 답에 있는 두 줄짜리 해결책을 사용했다.
언급URL : https://stackoverflow.com/questions/7100125/storing-python-dictionaries
'programing' 카테고리의 다른 글
Mac bash 명령줄에서 Gradle을 실행하는 방법 (0) | 2022.09.29 |
---|---|
개미와 메이븐의 차이점 (0) | 2022.09.29 |
PIL을 사용하여 이미지 크기를 조정하고 가로 세로 비율을 유지하는 방법은 무엇입니까? (0) | 2022.09.28 |
vCruntime140.dll 14.0은 PHP 빌드와 호환되지 않습니다. (0) | 2022.09.28 |
package.json의 'main' 파라미터를 사용하는 방법 (0) | 2022.09.28 |