将字符串导入为有序字典
Importing string as an ordered dictionary
我有一个没有扩展名的文件,其中包含这样的行(忽略行之间的间距,但每行都是单独的一行):
OrderedDict([('key1', u'value1'), ('key2', 'value2')])
OrderedDict([('key1', u'value1'), ('key2', 'value2')])
OrderedDict([('key1', u'value1'), ('key2', 'value2')])
当我将其导入 Python
snap_fh = open("C:\Users\.......")
for row in snap_fh:
print(type(row))
行是 "strings"
,我无法将其解析为 OrderedDictionary
"OrderedDict([('key1', u'value1'), ('key2', 'value2'))])\n"
如何将其导入为 OrderedDict
ast.literal_eval(row)
无效!
使用 eval 似乎效果很好
s = "OrderedDict([('key1', u'value1'), ('key2', 'value2')])"
a = eval(s, {'OrderedDict': OrderedDict})
print (a)
仅当您信任您的输入来源时才使用它 - 因为 eval 风险很大
您应该使用正则表达式进行更安全的评估:
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)
我有一个没有扩展名的文件,其中包含这样的行(忽略行之间的间距,但每行都是单独的一行):
OrderedDict([('key1', u'value1'), ('key2', 'value2')])
OrderedDict([('key1', u'value1'), ('key2', 'value2')])
OrderedDict([('key1', u'value1'), ('key2', 'value2')])
当我将其导入 Python
snap_fh = open("C:\Users\.......")
for row in snap_fh:
print(type(row))
行是 "strings"
,我无法将其解析为 OrderedDictionary
"OrderedDict([('key1', u'value1'), ('key2', 'value2'))])\n"
如何将其导入为 OrderedDict
ast.literal_eval(row)
无效!
使用 eval 似乎效果很好
s = "OrderedDict([('key1', u'value1'), ('key2', 'value2')])"
a = eval(s, {'OrderedDict': OrderedDict})
print (a)
仅当您信任您的输入来源时才使用它 - 因为 eval 风险很大
您应该使用正则表达式进行更安全的评估:
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)