문제

내가 필요로 저장하는 파이썬 만든 구조물의 목록/전,튜플 인간으로 읽을 수 있는 형식입니다.아이디어가 사용하여 같은 비슷한 피클, 지만,피클은 인간 친화적이다.다른 옵션으로는 내 마음에 와서는 YAML (해 PyYAMLJSON (해 simplejson)serializer.

다른 옵션은 당신의 마음에 오는?

미리 감사드립니다.

도움이 되었습니까?

해결책

간단한 경우 pprint () 및 Eval ()가 떠 오릅니다.

예제 사용 :

>>> d = {'age': 27,
...  'name': 'Joe',
...  'numbers': [1, 
...              2, 
...              3,
...              4,
...              5],
...  'subdict': {
...              'first': 1, 
...              'second': 2,
...               'third': 3
...              }
... }
>>> 
>>> from pprint import pprint
>>> pprint(d)
{'age': 27,
 'name': 'Joe',
 'numbers': [1, 2, 3, 4, 5],
 'subdict': {'first': 1, 'second': 2, 'third': 3}}
>>> 

동일한 도구로 두 가지 요구 사항을 수정하는 것에 대해 두 번 생각합니다. 직렬화에 피클을 사용한 다음 물체를보고있는 인간을위한 pprint () (또는 더 멋진 객체 뷰어)를 고려해 보셨습니까?

다른 팁

만약 단지 파이썬 목록, 사전 및 튜플 객체. - JSON 갈 길입니다. 인간은 읽기 쉽고 처리하기 쉽고 언어도 독립적입니다.

주의 : Tuples는 SimpleJson의 목록으로 변환됩니다.

In [109]: simplejson.loads(simplejson.dumps({'d':(12,3,4,4,5)}))
Out[109]: {u'd': [12, 3, 4, 4, 5]}

JSON이 다루는 것보다 더 많은 표현을 한 경우, 나는 체크 아웃하는 것이 좋습니다. (파이썬 객체 표기법) ... 2.6/3.0 이상으로 제한되어 있다고 생각하지만 ast 기준 치수. JSON이 제공하는 것 이상의 다른 기능 중에서 사용자 정의 클래스 인스턴스 및 재귀 데이터 유형을 처리합니다.

JSONPICKLE을 확인해야합니다 (https://github.com/jsonpickle/jsonpickle). Python 객체를 JSON 파일에 기록합니다. 그런 다음 해당 파일을 Python 객체로 다시 읽을 수 있습니다. 좋은 점은 JSON이기 때문에 중간 파일이 매우 읽을 수 있다는 것입니다.

이것이 인간이 읽을 수 없다는 것은 무엇을 의미합니까 ??? ;)

>>> d = {'age': 27, 
...   'name': 'Joe',
...   'numbers': [1,2,3,4,5],
...   'subdict': {'first':1, 'second':2, 'third':3}
... }
>>> 
>>> import pickle
>>> p = pickle.dumps(d)      
>>> p
"(dp0\nS'age'\np1\nI27\nsS'subdict'\np2\n(dp3\nS'second'\np4\nI2\nsS'third'\np5\nI3\nsS'first'\np6\nI1\nssS'name'\np7\nS'Joe'\np8\nsS'numbers'\np9\n(lp10\nI1\naI2\naI3\naI4\naI5\nas."

좋아, 글쎄, 어쩌면 그것은 단지 약간의 연습이 필요합니다 ... 또는 당신은 속임수 ...

>>> import pickletools 
>>> pickletools.dis(p)
    0: (    MARK
    1: d        DICT       (MARK at 0)
    2: p    PUT        0
    5: S    STRING     'age'
   12: p    PUT        1
   15: I    INT        27
   19: s    SETITEM
   20: S    STRING     'subdict'
   31: p    PUT        2
   34: (    MARK
   35: d        DICT       (MARK at 34)
   36: p    PUT        3
   39: S    STRING     'second'
   49: p    PUT        4
   52: I    INT        2
   55: s    SETITEM
   56: S    STRING     'third'
   65: p    PUT        5
   68: I    INT        3
   71: s    SETITEM
   72: S    STRING     'first'
   81: p    PUT        6
   84: I    INT        1
   87: s    SETITEM
   88: s    SETITEM
   89: S    STRING     'name'
   97: p    PUT        7
  100: S    STRING     'Joe'
  107: p    PUT        8
  110: s    SETITEM
  111: S    STRING     'numbers'
  122: p    PUT        9
  125: (    MARK
  126: l        LIST       (MARK at 125)
  127: p    PUT        10
  131: I    INT        1
  134: a    APPEND
  135: I    INT        2
  138: a    APPEND
  139: I    INT        3
  142: a    APPEND
  143: I    INT        4
  146: a    APPEND
  147: I    INT        5
  150: a    APPEND
  151: s    SETITEM
  152: .    STOP
highest protocol among opcodes = 0
>>> 

여전히 파일에서 절인 객체를 읽어야하지만 필요하지 않습니다. load 그것. 따라서 그것이 "위험한"대상이라면, 당신은 여전히 load. 당신이 a pickle, 그것은 당신이 가진 것을 해독하기에 좋은 옵션 일 수 있습니다.

먼저 SimpleJson을 사용합니다 easy_install simplejson:

import simplejson
my_structure = {"name":"Joe", "age":27, "numbers":[1,2,3,4,5], "subdict":{"first":1, "second":2, "third": 3}}
json = simplejson.dumps(my_structure)

JSON은 다음과 같습니다.

{"age": 27, "subdict": {"second": 2, "third": 3, "first": 1}, "name": "Joe", "numbers": [1, 2, 3, 4, 5]}

사전 형식이 거의 변경되지 않았지만 유효한 JSON 데이터를 보장하기 위해이 단계를 통해 실행해야합니다.

결과를 더 많이 인쇄 할 수 있습니다.

import pprint
pprint.pprint(my_structure)

결과 :

{'age': 27,
 'name': 'Joe',
 'numbers': [1, 2, 3, 4, 5],
 'subdict': {'first': 1, 'second': 2, 'third': 3}}

축삭 (텍스트)는 형식으로 결합 JSON,XML,YAML.축삭 형식은 아주 읽을 수 있는 상대적으로 컴팩트합니다.

Python(2.7/3.3-3.7)모듈 pyaxon 지원 load(s)/dump(s) 기능을 포함하여 반복적 loading/dumping.그것은 충분히 빠르게하기 위해 유용합니다.

을 고려한 간단한 예제:

>>> d = {
     'age': 27, 'name': 'Joe', 
     'numbers': [1, 2, 3, 4, 5], 
     'subdict': {'first': 1, 'second': 2, 'third': 3}
    }
# pretty form
>>> axon.dumps(d, pretty=1)
{ age: 27
  name: "Joe"
  numbers: [1 2 3 4 5]
  subdict: {
    first: 1
    second: 2
    third: 3}}
# compact form
>>> axon.dumps(d)
{age:27 name:"Joe" numbers:[1 2 3 4 5] subdict:{first:1 second:2 third:3}}

그것은 또한 처리할 수 있는 다중 객체에 메시지:

>>> msg = axon.dumps([{'a':1, 'b':2, 'c':3}, {'a':2, 'b':3, 'c':4}])
>>> print(msg)
{a:1 b:2 c:3} 
{a:2 b:3 c:4}
{a:3 b:4 c:5}

다음드 반복적으로:

for d in axon.iloads(msg):
   print(d)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top