2011-12-16 39 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'}}