我觉得这是一个奇怪的请求。 我从一个字符串开始,然后通过一个处理字符串(很多行)的函数来运行它,并返回一个列表。 此列表包含时间戳和文本。这是一个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>
然后我试了literal_eval从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'ing两次? –
因为显然通过我所有的测试,我忘了把它改成json.loads,它可以工作。那个怎么样。 – jgauthier
请[编辑]你的问题,并确切地显示最初在'线路'中的内容。 – martineau