将字符串导入为有序字典

pem*_*fir 2 python string import ordereddictionary

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

OrderedDict([('key1', u'value1'), ('key2', 'value2')])
OrderedDict([('key1', u'value1'), ('key2', 'value2')])
OrderedDict([('key1', u'value1'), ('key2', 'value2')])
Run Code Online (Sandbox Code Playgroud)

当我将它导入Python

snap_fh = open("C:\Users\.......")
for row in snap_fh:
    print(type(row))
Run Code Online (Sandbox Code Playgroud)

行是"strings",我不能解析它OrderedDictionary

"OrderedDict([('key1', u'value1'), ('key2', 'value2'))])\n"
Run Code Online (Sandbox Code Playgroud)

如何将其导入为 OrderedDict

ast.literal_eval(row) 不工作 !

Jun*_*sor 5

您应该使用正则表达式来进行更安全的评估:

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)
Run Code Online (Sandbox Code Playgroud)