Python 将字符串转换为列表并返回

Python 将字符串转换为列表并返回,python,string,list,type-conversion,string-conversion,Python,String,List,Type Conversion,String Conversion,我觉得这是一个奇怪的要求。 我从一个字符串开始,然后通过一个处理字符串(许多行)并返回列表的函数运行它。 此列表包含时间戳和文本。实际上,这是一个LRC文件(带有曲目时间的歌词) 我正在编写一些kodi(xmbc)模块,它运行自己的python解释器。我可以在插件之间共享数据,但只能作为字符串。(将它们设置为kodi中的属性) 因此,我有一个列表,我可以用str()轻松地将其转换为字符串,但我无法将其返回到我可以处理的同一个列表中 一些示例文本: [01:45.17]<i>I can

我觉得这是一个奇怪的要求。 我从一个字符串开始,然后通过一个处理字符串(许多行)并返回列表的函数运行它。 此列表包含时间戳和文本。实际上,这是一个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
一旦我用str()将其转换为字符串,它看起来就像上面的字符串一样

现在,我想把这个字符串恢复到原来的列表表单中。因此,我可以对其进行逐行处理,并引用元素,就像我可以使用预转换列表一样:

print line['text']
print line['timestamp']
我尝试过各种方法,但似乎无法将其重新列入我可以循环使用的列表中

我看了一下(“行”是列表):

但这告诉我线条仍然是一个“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>
但那更不喜欢我的琴弦

  File "/usr/lib/python2.7/ast.py", line 79, in _convert
    raise ValueError('malformed string')
ValueError: malformed string

我可以在一个插件和另一个插件中执行此任务。但是本着设计的精神,我有一个后端来完成这项工作,而前端用来描绘美丽的画面。我更愿意把工作放在后端,尽量减少在前端加载模块和进程。

一般来说,我只会在每一行单独使用字符串格式,然后用换行符将它们连接起来。我假设您有一个来自_dbus_int64的函数
,它将
dbus.int64
转换为您的时间戳格式,因为我对dbus一无所知

def from_parsed_line(line):
    return "{timestamp}{text}".format(
        timestamp=from_dbus_int64(line["timestamp"]),
        text=line["text"]
    )
然后您可以只使用
“\n”.join(对于行中的行,从解析的行(行)开始)


我注意到的一件事是,您的示例在第一行中有
,但您解析的数据在
文本中没有。除非你能解释原因,否则我不能帮你把它放回去。我想您可以找到答案。

不确定格式,但看起来您需要一对
json.dumps
(将数据结构序列化为字符串,您已经有了)和
json.loads
(它们的作用正好相反)。并在反序列化字符串后迭代并获取所需的键/值。

我最初没有编写此函数,我不知道作者为什么使用dbus.types

因此,有两种解决方案:

正确使用json.dumps和json.loads,我没有这样做

或者,删除dbus.types和使用的标准python类型。
执行后者允许我使用str()和eval()进行转换,这是我在加载模块时更喜欢的


谢谢

为什么你要两次
json.dumps
ing呢?因为很明显,在我所有的测试中,我忘了把它改成json.loads,这很有效。怎么样。请回答您的问题,并准确显示
行中最初的内容。这是示例文本。如果能让你感觉好一点的话,你可以把线条括起来!
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
def from_parsed_line(line):
    return "{timestamp}{text}".format(
        timestamp=from_dbus_int64(line["timestamp"]),
        text=line["text"]
    )