如何从txt文件在python中创建字典?

时间:2011-12-16 13:46:32

标签: python parsing dictionary

我有一个看起来像这样的文件:

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创建一个字典,稍后我可以在程序中参考获取特定节点的特定值?

5 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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

如果我解释了你想要的东西,请纠正我。

答案 2 :(得分: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

答案 3 :(得分: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

答案 4 :(得分: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'}}