답변:
json 모듈 은 여기서 좋은 솔루션입니다. 일반 텍스트 출력 만 생성하고 크로스 플랫폼 및 크로스 버전이라는 피클보다 장점이 있습니다.
import json
json.dumps(dict)
import json
내가 한 것처럼 잊지 마세요 !
사전이 너무 크지 않으면 str + eval이 작업을 수행 할 수 있습니다.
dict1 = {'one':1, 'two':2, 'three': {'three.1': 3.1, 'three.2': 3.2 }}
str1 = str(dict1)
dict2 = eval(str1)
print dict1==dict2
소스를 신뢰할 수없는 경우 추가 보안을 위해 eval 대신 ast.literal_eval 을 사용할 수 있습니다 .
왜 파이썬 3의 붙박이 사용하지 AST의 라이브러리의 기능 literal_eval을 . eval 대신 literal_eval 을 사용하는 것이 좋습니다
import ast
str_of_dict = "{'key1': 'key1value', 'key2': 'key2value'}"
ast.literal_eval(str_of_dict)
실제 사전으로 출력을 제공합니다
{'key1': 'key1value', 'key2': 'key2value'}
그리고 사전을 문자열 로 변환하도록 요청하는 경우 str () 사용은 어떻습니까? Python의 메소드를 .
사전이 다음과 같다고 가정하십시오.
my_dict = {'key1': 'key1value', 'key2': 'key2value'}
그리고 이것은 다음과 같이 수행됩니다 :
str(my_dict)
인쇄합니다 :
"{'key1': 'key1value', 'key2': 'key2value'}"
이것은 당신이 원하는대로 쉽습니다.
나는 당신이 사용하는 것을 고려해야한다고 생각합니다 shelve
영구적 인 파일 백업 사전과 유사한 객체를 제공 모듈 합니다. "실제"사전 대신 사용하기 쉽습니다. 사전에 문자열처럼 명시 적으로 변환 한 다음 파일에 쓸 필요없이 사전처럼 사용할 수있는 프로그램을 거의 투명하게 제공하기 때문입니다. 반대로).
가장 큰 차이점은 처음에 필요가되어 open()
처음 사용하기 전에 다음 close()
당신이 완료되면 (그리고 아마도 sync()
그것을 보내고는에 따라writeback
사용중인 옵션에 입니다. 생성 된 "shelf"파일 객체에는 값으로 정규 사전이 포함되어 논리적으로 중첩 될 수 있습니다.
다음은 간단한 예입니다.
import shelve
shelf = shelve.open('mydata') # open for reading and writing, creating if nec
shelf.update({'one':1, 'two':2, 'three': {'three.1': 3.1, 'three.2': 3.2 }})
shelf.close()
shelf = shelve.open('mydata')
print shelf
shelf.close()
산출:
{'three': {'three.1': 3.1, 'three.2': 3.2}, 'two': 2, 'one': 1}
읽을 수 있어야하는 경우 (JSON도 XML도 IMHO도 아니거나) 읽기가 필요하지 않은 경우 피클을 사용하기 위해 yaml을 사용합니다.
쓰다
from pickle import dumps, loads
x = dict(a=1, b=2)
y = dict(c = x, z=3)
res = dumps(y)
open('/var/tmp/dump.txt', 'w').write(res)
다시 읽기
from pickle import dumps, loads
rev = loads(open('/var/tmp/dump.txt').read())
print rev
b
여기서 파일을 열 때 실제로 플래그를 사용해야 합니다.
dumps()
기본값은 프로토콜 0이며 이는 ASCII 프로토콜입니다. 'rb'
IMHO가 필요하지 않은 이유 입니다.