假设我有一个要读取的输出文件,并且每一行都是通过将几种类型连接在一起创建的,预先和附加列表大括号,
[('tupleValueA','tupleValueB'), 'someString', ('anotherTupleA','anotherTupleB')]
我想读入这些行。现在我可以读入它们,并对字符串进行操作以分配值和类型,但我想知道 Python 是否有更高级别的方法。
在构建了一个函数来执行此操作后,我试图找到一种更高级别的方法,但没有找到。
您正在寻找的是eval。但请记住,此函数将评估并执行这些行。所以永远不要在不受信任的输入上运行它!
>>> print eval("[('tupleValueA', 1), 'someString']")
[('tupleValueA', 1), 'someString']
如果您可以控制生成输出文件的脚本,那么我建议您使用json编码。JSON 格式与列表和字典的 Python 字符串表示非常相似。并且读取起来会更加安全和健壮。
>>> import json
>>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
'["foo", {"bar": ["baz", null, 1.0, 2]}]'
>>> json.loads('["foo", {"bar": ["baz", null, 1.0, 2]}]')
["foo", {"bar": ["baz", null, 1.0, 2]}]
您描述的问题通常称为序列化。 JavaScript Object Notation (JSON)是一种流行的序列化协议。
可能最好首先使用像pickle这样的模块来存储数据,而不是使用普通字符串。通过这种方式,您可以避免很多随之而来的问题,eval
并获得更强大的解决方案。