Ich fühle mich wie dies eine seltsame Anfrage ist. Ich beginne mit einer Zeichenfolge, und dann führe ich das durch eine Funktion, die die Zeichenfolge (viele Zeilen) verarbeitet und eine Liste zurückgibt. Diese Liste enthält Zeitstempel und Text. Es ist eine LRC-Datei, eigentlich (Lyric mit Track-Zeit)Konvertieren Sie eine Zeichenfolge in eine Liste und zurück
Ich schreibe ein paar Kodi (xmbc) -Module, und es läuft ein eigener Python-Interpreter. Ich kann Daten zwischen Addons aber nur als Zeichenketten teilen. (Setzen sie als eine Eigenschaft in Kodi)
So habe ich eine Liste, die ich leicht in eine Zeichenfolge mit str() konvertieren kann, aber ich kann es nicht zurück in die gleiche Liste, die ich damit umgehen kann.
Einige Beispieltext:
[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
Das kommt von meiner Parserfunktion als Liste. In Rohform wie folgt aussieht:
[{'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'}]
Sobald ich dies in einen String mit str konvertieren() es sieht genauso aus wie das, was als String ist oben.
Jetzt möchte ich diese Zeichenfolge zurück in die ursprüngliche Listenform erhalten. Damit ich durch die Linie Prozesse auf sie tun Linie können, und die Elemente verweisen, wie ich mit der bereits konvertierte Liste kann:
print line['text']
print line['timestamp']
ich verschiedene Dinge ausprobiert habe, aber kann nicht scheinen, um es zu bekommen zurück in eine Liste, die ich durchlaufen kann.
ich json.dumps sah ('Linien' ist die Liste):
lines_str=json.dumps(lines)
newlines=json.dumps(lines_str)
print newlines.__class__.__name__
Aber das sagt mir, dass Linien ist immer noch ein "str" Also habe ich versucht, mit eval:
lines_str=str(lines)
newlines=eval(lines_str)
hat
Aber eval nicht das String-Format mag:
Traceback (most recent call last):
File "./l.py", line 33, in <module>
newlines=eval(lines_str)
File "<string>", line 1, in <module>
dann habe ich versucht literal_eval vom ast Modul:
lines_str=str(lines)
newlines=ast.literal_eval(lines_str)
Aber das mochte meine Schnur noch weniger.
File "/usr/lib/python2.7/ast.py", line 79, in _convert
raise ValueError('malformed string')
ValueError: malformed string
Ich könnte diese Aufgabe in einem Addon gegenüber dem anderen durchführen. Aber im Geiste des Designs habe ich ein Backend, das die Arbeit macht, und das Frontend, das die schönen Bilder malt. Ich würde es vorziehen, die Arbeit am Backend zu behalten und Lademodule und Prozesse am Frontend zu minimieren.
Warum sind Sie 'json.dumps' zweimal? –
Weil ich anscheinend bei all meinen Tests vergessen habe, das zu json.loads zu ändern, was funktioniert. Wie ist es damit. – jgauthier
Bitte bearbeiten Sie Ihre Frage und zeigen Sie genau an, was sich ursprünglich in "Zeilen" befindet. – martineau