<질문>
저는 사전 객체에 데이터를 저장하는 프로그램을 작성하고 있지만 이 데이터는 프로그램 실행 중 어느 시점에 저장되고 프로그램이 다시 실행될 때 사전 객체로 다시 로드되어야 합니다. 사전 객체를 파일에 기록하고 사전 객체로 다시 로드할 수 있는 문자열로 어떻게 변환합니까? 이것은 사전을 포함하는 사전을 지원하기를 바랍니다.
<답변1>
The json module여기에 좋은 해결책이 있습니다. 일반 텍스트 출력만 생성하고 크로스 플랫폼 및 크로스 버전이라는 피클에 비해 장점이 있습니다.
import json
json.dumps(dict)
<답변2>
사전이 너무 크지 않으면 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)
당신이 사용할 수있는ast.literal_eval소스를 신뢰할 수 없는 경우 추가 보안을 위해 eval 대신.
<답변3>
나는 사용한다json
:
import json
# convert to string
input_ = json.dumps({'id': id_ })
# load to dict
my_dict = json.loads(input_)
<답변4>
Python 3의 내장을 사용하지 않는 이유아스트도서관의 기능literal_eval. 사용하는 것이 좋습니다literal_eval대신에평가
import ast
str_of_dict = "{'key1': 'key1value', 'key2': 'key2value'}"
ast.literal_eval(str_of_dict)
출력을 실제 사전으로 제공합니다.
{'key1': 'key1value', 'key2': 'key2value'}
그리고 변환을 요청하는 경우문자열에 대한 사전그럼, 어떻게 사용합니까str()파이썬의 메소드.
사전이 다음과 같다고 가정합니다.
my_dict = {'key1': 'key1value', 'key2': 'key2value'}
그리고 이것은 다음과 같이 수행됩니다.
str(my_dict)
인쇄 예정:
"{'key1': 'key1value', 'key2': 'key2value'}"
이것은 당신이 원하는대로 쉽습니다.
<답변5>
사용pickle
모듈을 디스크에 저장하고 나중에 로드합니다.
<답변6>
사전을 JSON(문자열)으로 변환
import json
mydict = { "name" : "Don",
"surname" : "Mandol",
"age" : 43}
result = json.dumps(mydict)
print(result[0:20])
당신을 얻을 것입니다:
{"이름": "돈", "수르
문자열을 사전으로 변환
back_to_mydict = json.loads(result)
<답변7>
중국어에서는 다음과 같이 조정해야 합니다.
import codecs
fout = codecs.open("xxx.json", "w", "utf-8")
dict_to_json = json.dumps({'text':"中文"},ensure_ascii=False,indent=2)
fout.write(dict_to_json + '\n')
<답변8>
당신은 찾을 수 있습니다json.dumps()
메서드는 일부 개체 유형을 처리하는 데 도움이 필요합니다.
크레딧은this post다음에 대한:
import json
json.dumps(my_dictionary, indent=4, sort_keys=True, default=str)
<답변9>
나는 당신이 사용을 고려해야한다고 생각합니다shelve
영구적인 파일 지원 사전과 유사한 객체를 제공하는 모듈입니다. 명시적으로 문자열로 변환한 다음 파일에 쓸 필요 없이 사전처럼 사용할 수 있는 것을 프로그램에 거의 투명하게 제공하기 때문에 "실제" 사전 대신 사용하기 쉽습니다. 반대).
주요 차이점은 초기에open()
처음 사용하기 전에close()
당신이 완료되면 (그리고 아마도sync()
그것에 따라writeback
사용 중인 옵션). 생성되는 모든 "선반" 파일 개체는 일반 사전을 값으로 포함할 수 있으므로 논리적으로 중첩될 수 있습니다.
다음은 간단한 예입니다.
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}
<답변10>
속도 사용에 관심이 있다면ujson(UltraJSON), json과 동일한 API가 있음:
import ujson
ujson.dumps([{"key": "value"}, 81, True])
# '[{"key":"value"},81,true]'
ujson.loads("""[{"key": "value"}, 81, true]""")
# [{u'key': u'value'}, 81, True]
<답변11>
읽을 수 있어야 하는 경우(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
<답변12>
나는 문제가 내 dict 객체에 있는 것이 아니라 RubyMarshl 'loads' 메서드로 로드한 후 RubyString 유형의 키와 값이라는 것을 알아냈습니다.
그래서 나는 이렇게 했다:
dic_items = dict.items()
new_dict = {str(key): str(value) for key, value in dic_items}
'개발 > Python' 카테고리의 다른 글
[파이썬] len함수 코스트(비용) (0) | 2023.01.22 |
---|---|
[파이썬] NumPy 배열을 파이썬 리스트로 변환 (0) | 2023.01.22 |
[파이썬] x축 또는 y축을 반전시키는 방법 (0) | 2023.01.22 |
[파이썬] 리스트에서 교차점을 찾는 방법? (0) | 2023.01.22 |