簡體   English   中英

將字符串導入為有序字典

[英]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)不起作用!

您應該使用正則表達式來進行更安全的評估:

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)

只有在您信任輸入源時才使用它 - 因為eval 非常危險

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM