나는 이것이 이상한 요청이라고 생각합니다. 문자열로 시작한 다음 문자열 (여러 줄)을 처리하고 목록을 반환하는 함수를 통해이를 실행합니다. 이 목록에는 타임 스탬프와 텍스트가 들어 있습니다. 그것은 실제로 LRC 파일입니다 (트랙 시간과 함께 가사)문자열을 목록으로 변환하고 뒤로
나는 소수의 kodi (xmbc) 모듈을 쓰고 있으며 자체 파이썬 인터프리터를 실행합니다. addons간에 데이터를 공유 할 수 있지만 문자열로만 사용할 수 있습니다. (kodi에서 속성으로 설정)
그래서 나는 str()을 사용하여 쉽게 문자열로 변환 할 수있는 목록을 가지고 있지만 처리 할 수있는 동일한 목록으로 되돌릴 수는 없습니다.
몇 가지 예를 들어 텍스트 :
[01:45.17]<i>I cant remember anything
[01:48.80]Cant tell if this is true or dream
[01:52.29]Deep down inside I feel to scream
[01:55.91]This terrible silence stops me
이 목록으로 내 파서 함수에서 돌아옵니다. 원시 형태로 다음과 같습니다
[{'timestamp': dbus.Int64(105170L), 'id': dbus.UInt32(0L), 'text': 'I cant remember anything'}, {'timestamp': dbus.Int64(108800L), 'id': dbus.UInt32(1L), 'text': 'Cant tell if this is true or dream'}, {'timestamp': dbus.Int64(112290L), 'id': dbus.UInt32(2L), 'text': 'Deep down inside I feel to scream'}, {'timestamp': dbus.Int64(115910L), 'id': dbus.UInt32(3L), 'text': 'This terrible silence stops me'}]
내가 STR로 문자열이 변환되면() 정확히 문자열로 위의 무엇처럼 보인다.
이제이 문자열을 원래 목록 양식으로 되돌리고 싶습니다. 나는 그것에 라인 프로세스 라인을, 내가 미리 변환 된 목록과 함께 할 수있는대로 요소를 참조 할 수 있도록 : 나는 여러 가지를 시도했습니다
print line['text']
print line['timestamp']
, 그러나 그것을 다시 얻을 수없는 것 루프를 통해 목록을 만들 수 있습니다.
내가 json.dumps 보았다 ('라인'목록입니다) :lines_str=str(lines)
newlines=eval(lines_str)
:
lines_str=json.dumps(lines)
newlines=json.dumps(lines_str)
print newlines.__class__.__name__
는 그러나이 선은 "STR" 그래서 여전히 있음을 알려줍니다, 나는 평가와 시도
Traceback (most recent call last):
File "./l.py", line 33, in <module>
newlines=eval(lines_str)
File "<string>", line 1, in <module>
다음 내가시도 :
그러나 평가는 문자열 형식을 좋아하지 않는다 ast 모듈에서은 :
lines_str=str(lines)
newlines=ast.literal_eval(lines_str)
는 그러나 그것은 더 적은 내 캐릭터를 좋아했다.
File "/usr/lib/python2.7/ast.py", line 79, in _convert
raise ValueError('malformed string')
ValueError: malformed string
이 작업은 하나의 애드온에서 수행 할 수 있습니다. 그러나 디자인의 정신으로 나는 작업을 수행하는 백엔드와 예쁜 그림을 그리는 프론트 엔드를 가지고있다. 백 엔드에서 작업을 유지하고 프런트 엔드에서 모듈 및 프로세스로드를 최소화하는 것이 좋습니다.
왜 'json.dumps'가 두 번입니까? –
분명히 모든 테스트를 통해 json.loads로 변경하는 것을 잊어 버렸기 때문에 작동합니다. 어떻게에 대한. – jgauthier
질문을 편집하고 처음에'lines'에 정확히 무엇을 표시하십시오. – martineau