Python读取字典的存档

时间:2016-12-27 16:04:35

标签: python python-3.x

如何读取文件并将以下行的信息转换为python词典:

文件:

orig sorted(list(set(loadDB('db/path_orig'))))
dest sorted(list(set(loadDB('db/path_dest'))))
md_dest ''.join(loadDB('db/path_md_dest'))
main ''.join(loadDB('db/main_batch'))
copy ''.join(loadDB('db/copy_batch'))

预期结果:

option = {
        'orig': sorted(list(set(loadDB('db/path_orig')))),
        'dest': sorted(list(set(loadDB('db/path_dest')))),
        'md_dest': ''.join(loadDB('db/path_md_dest')),
        'main': ''.join(loadDB('db/main_batch')),
        'copy': ''.join(loadDB('db/copy_batch'))
    }

我试过了:

with open('text') as f:
    d = dict(x.rstrip().split(None, 1) for x in f)

结果:

d = {
    'main': "''.join(loadDB('db/main_batch')),", 
    'copy': "''.join(loadDB('db/copy_batch'))", 
    'dest': "sorted(list(set(loadDB('db/path_dest')))),", 
    'md_dest': "''.join(loadDB('db/path_md_dest')),", 
    'orig': "sorted(list(set(loadDB('db/path_orig')))),"
}

2 个答案:

答案 0 :(得分:0)

这样的东西?

import ast

with open('text','r') as f:
    d1 = {line.strip().split(' :: ')[0]:line.strip().split(' :: ')[1] for line in f}

d2={}
for k,v in d1.iteritems():
    d2[k] = ast.literal_eval(v)

答案 1 :(得分:0)

这是一个开箱即用的解决方案,假设您在类Unix环境中运行。

首先在命令行上运行以下命令:

echo 'option = {' > file.py
sed 's/ /: /' file >> file.py
echo '}' >> file.py

您现在已经从原始file.py创建了可导入的Python脚本file。你现在可以做

import file

在您的驱动程序脚本中。

如果格式化很重要,您可能希望使用以下sed命令作为替代:

sed -e 's/ /: /' -e 's/^/    /' file.txt