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

Xan*_*ros 22 python python-2.7

我有一个虚拟机,它从嵌套在列表中的元组中读取指令,如下所示:

[(0,4738),(0,36),
 (0,6376),(0,0)]
Run Code Online (Sandbox Code Playgroud)

存储这种机器代码程序时,文本文件最简单,必须写成字符串.这显然很难转换回去.

是否有任何模块可以将字符串读入列表/以可读的方式存储列表?

要求:

  • 必须是人类可读的存储形式(因此"泡菜"不适合)
  • 必须相对容易实施

Mar*_*ers 37

使用json模块:

string = json.dumps(lst)
lst = json.loads(string)
Run Code Online (Sandbox Code Playgroud)

演示:

>>> import json
>>> lst = [(0,4738),(0,36),
...  (0,6376),(0,0)]
>>> string = json.dumps(lst)
>>> string
'[[0, 4738], [0, 36], [0, 6376], [0, 0]]'
>>> lst = json.loads(string)
>>> lst
[[0, 4738], [0, 36], [0, 6376], [0, 0]]
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用repr()ast.literal_eval(); 只有列表,元组和整数,也允许你往返:

>>> from ast import literal_eval
>>> string = repr(lst)
>>> string
'[[0, 4738], [0, 36], [0, 6376], [0, 0]]'
>>> lst = literal_eval(string)
>>> lst
[[0, 4738], [0, 36], [0, 6376], [0, 0]]
Run Code Online (Sandbox Code Playgroud)

JSON具有额外的优势,它是一种标准格式,支持Python以外的工具支持序列化,解析和验证.该json库也比ast.literal_eval()函数快很多.


Suk*_*lra 21

只是用 ast.literal_eval

>>> from ast import literal_eval
>>> a = literal_eval('[(1, 2)]')
>>> a
[(1, 2)]
Run Code Online (Sandbox Code Playgroud)

您可以使用将其转换为字符串repr().

>>> repr(a)
'[(1, 2)]'
Run Code Online (Sandbox Code Playgroud)


Sla*_*off 16

JSON!

import json

with open(data_file, 'wb') as dump:
    dump.write(json.dumps(arbitrary_data))
Run Code Online (Sandbox Code Playgroud)

同样地:

source = open(data_file, 'rb').read()
data = json.loads(source)
Run Code Online (Sandbox Code Playgroud)


小智 13

eval 应该以一种简单的方式做到:

>>> str([(0,4738),(0,36),(0,6376),(0,0)])
'[(0, 4738), (0, 36), (0, 6376), (0, 0)]'

>>> eval(str([(0,4738),(0,36),(0,6376),(0,0)]))
[(0, 4738), (0, 36), (0, 6376), (0, 0)]
Run Code Online (Sandbox Code Playgroud)