これは奇妙な要求だと思います。 文字列で始まり、文字列を処理する関数(多くの行)を実行してリストを返します。 このリストにはタイムスタンプとテキストが含まれています。これはLRCファイルです(実際には歌詞付き)。文字列をリストに変換して戻す
私はいくつかのkodi(xmbc)モジュールを作成しています。独自のPythonインタプリタを実行しています。アドオン間でデータを共有することはできますが、文字列としてしか共有できません。 (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=json.dumps(lines)
newlines=json.dumps(lines_str)
print newlines.__class__.__name__
しかし、これはラインがまだ "STR" あるので、私はevalをしてみましたと言われます:
lines_str=str(lines)
newlines=eval(lines_str)
しかし、evalのは、文字列の形式が好きではありません。
Traceback (most recent call last):
File "./l.py", line 33, in <module>
newlines=eval(lines_str)
File "<string>", line 1, in <module>
、私はを試してみました
lines_str=str(lines)
newlines=ast.literal_eval(lines_str)
しかし、それはさらに少ない私の文字列を気に入っ:astモジュールから。
File "/usr/lib/python2.7/ast.py", line 79, in _convert
raise ValueError('malformed string')
ValueError: malformed string
このタスクは、1つのアドオンと他のアドオンで実行できます。しかし、デザインの精神で、私は仕事をするバックエンドと、美しい絵を描くフロントエンドを持っています。バックエンドで作業を続け、フロントエンドのモジュールやプロセスのロードを最小限に抑えることをお勧めします。
なぜあなたは 'json.dumps'を2回していますか? –
明らかに私が行ったすべてのテストを通して、それをjson.loadsに変更するのを忘れてしまったので動作します。どのようにそのことについて。 – jgauthier
あなたの質問を編集し、最初は 'lines'にあるものを正確に表示してください。 – martineau