将字符串作为有序字典导入

2024-10-05 14:26:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个没有扩展名的文件,其行如下(忽略行之间的间距,但每行都是一个单独的行):

OrderedDict([('key1', u'value1'), ('key2', 'value2')])
OrderedDict([('key1', u'value1'), ('key2', 'value2')])
OrderedDict([('key1', u'value1'), ('key2', 'value2')])

当我把它导入Python时

^{pr2}$

行是"strings",我无法将其解析为OrderedDictionary

"OrderedDict([('key1', u'value1'), ('key2', 'value2'))])\n"

如何将其作为OrderedDict导入

ast.literal_eval(row)不起作用!在


Tags: 文件evalastrowordereddictkey2key1间距
2条回答

为了更安全地计算,应使用正则表达式:

import re
import ast
from collections import OrderedDict

def read(f):
    for s in f:
        m = re.match(r'^OrderedDict\((.+)\)$', s)
        if m:
            yield OrderedDict(ast.literal_eval(m.group(1)))

...
for d in read(snap_fh):
    print type(d)

使用eval似乎很有效

s = "OrderedDict([('key1', u'value1'), ('key2', 'value2')])"
a = eval(s, {'OrderedDict': OrderedDict})
print (a)

只有当你相信你输入的来源时才使用它,因为评估是非常危险的

相关问题 更多 >