2011-12-16 38 views
1

我有一个看起来像这样的文件:如何从txt文件创建Python中的字典?

NODE=SC-1,CPU=90 
NODE=SC-1,MEM=10 
NODE=SC-1,FS=80 
NODE=SC-1,DIORead=30 
NODE=SC-1,DIOWrite=40 
NODE=SC-1,NTX=30 
NODE=SC-1,NRX=40 
NODE=SC-2,CPU=80 
NODE=SC-2,MEM=10 
NODE=SC-2,FS=80 
NODE=SC-2,DIORead=30 
NODE=SC-2,DIOWrite=40 
NODE=SC-2,NTX=30 
NODE=SC-2,NRX=40 

如何可以解析该文件并创建一个字典节点SC-1和一个节点SC-2,我以后可以在我的程序是指以获取特定节点的特定值?

+0

文件结构是否固定?我的意思是,文件中的行结构始终为``NODE = = ``? – ronakg 2011-12-16 13:51:24

+1

首先,包含你尝试过的东西的片段总是一个好主意。第二:你能否给我们提供一个字典应该是什么样子的样本? – Powertieke 2011-12-16 13:52:00

+0

@RonakG是的,它是固定的 – dan 2011-12-16 14:02:22

回答

3
from collections import defaultdict 
d = defaultdict(dict) 
for line in open('input_file','r'): 
    line = line.strip() 
    a,b = line.split(',') 
    node = a.split('=')[1] 
    key, value = b.split('=') 
    d[node][key] = value 
0

我相信你想解析这个文件&保持所有SC-*作为键和其余的东西作为他们的价值观。如果密钥是重复的,则合并这些值。如果这是你在找什么,然后我有手写一些代码,正是这么做的 -

我首先拆分行,然后= &拿到钥匙,如果键已经存在然后合并其他创建新条目。

def readFileIntoDict(fileHandle, dictName): 
    line = fileHandle.readline() 
    dictName = {} 

    while line: 
     key = line.split(',').split('=')[1] 
     if key in dictName: 
      dictName[key].append(line) 
     else: 
      dictName[key] = [line] 
     line = fileHandle.readline() 
    return dictName 

纠正我,如果我已经解释你想要什么。

0

这里是我的尝试(未经测试):

sc1 = {}    
sc2 = {}  
f = open("myfile", "r") 
for line in f: 
    dict = None 
    for statement in line.split(','): 
    varname, value = statement.split('=') 
    if varname == 'NODE' and value == 'SC-1': 
     dict = sc1 
    elif varname == 'NODE' and value == 'SC-2': 
     dict = sc2 
    else: 
     dict[varname] = value 
0

您可以创建一个 “2D” 的字典,词典,即一本字典。

“外部”字典的键将是节点名称(例如'SC-1','SC-2'),并且该值将是具有键{CPU,MEM,FS,DIORead, DIOWrite,NTX,NRX}。

这样的:

outerDict = {} 
for line in open('input', 'rb').readlines(): 
    key = line.split(',')[0].split('=')[0] 
    key2, val = line.split(',')[1].split('=') 

    if outerDict.has_key(key): 
     outerDict[key][key2] = val 
    else: 
     outerDict[key] = {} 
     outerDict[key][key2] = val 
0

考虑到你的文件结构与上面的例子一致的,这就是我会做 -

import pprint 

def read_file_into_dict(filename): 
    f = open(filename, 'r') 

    main_dict = {} 

    for line in f: 
     line = line.strip() 
     node_line, param_line = line.split(',') 
     node_name = node_line.split('=')[1] 
     param, value = param_line.split('=') 

     if main_dict.get(node_name): 
      main_dict[node_name][param] = value 
     else: 
      main_dict[node_name] = {param: value} 

    return main_dict 

pprint.pprint(read_file_into_dict('sample.txt')) 

这里的输出 -

$ python sample.py 
{'SC-1': {'CPU': '90', 
      'DIORead': '30', 
      'DIOWrite': '40', 
      'FS': '80', 
      'MEM': '10', 
      'NRX': '40', 
      'NTX': '30'}, 
'SC-2': {'CPU': '80', 
      'DIORead': '30', 
      'DIOWrite': '40', 
      'FS': '80', 
      'MEM': '10', 
      'NRX': '40', 
      'NTX': '30'}}