2017-10-19 55 views
0

我將使用python解析跟蹤文件。我閱讀了我的文件的每一行,並且希望將該行添加到字典中。在將每行與空格關鍵字分開並將每行的列添加到我的字典後,我打印結果。但問題是我的值與我的跟蹤文件中的值不一樣。在python中使用字典解析跟蹤文件

在另一個字,假設我的跟蹤文件的冷杉線是如下:

  • 0.1 1 2 CBR 1000 ------- 2 1.0 2.0 0 0

我的代碼如下:

global dics 
dics = [] 
count = 0 
line_dic = {} 
with codecs.open("trace.tr", "r", "UTF8") as inputFile: 
    inputFile=inputFile.readlines() 
for line in inputFile: 
    item = [] 
    item = line.split(" "); 
    line_dic['event'] = item[0] 
    line_dic['time'] = item[1] 
    line_dic['from_node'] = item[2] 
    line_dic['to_node'] = item[3] 
    line_dic['pkt_type'] = item[4] 
    line_dic['pkt_size'] = item[5] 
    line_dic['flags'] = item[6] 
    line_dic['fid'] = item[7] 
    line_dic['srcadd'] = item[8] 
    line_dic['dstadd'] = item[9] 
    line_dic['seqnum'] = item[10] 
    line_dic['pkti'] = item[11] 

    dics.append(line_dic) 
    print dics 

打印命令的結果是

[{'pkt_type': u'cbr', 'pkti': u'0\n', 'pkt_size': u'1000', 'seqnum': u'0', 'event': u'+', 'srcadd': u'1.0', 'flags': u'-------', 'fid': u'2', 'time': u'0.1', 'dstadd': u'2.0', 'to_node': u'2', 'from_node': u'1'}] 

正如你所看到的,第一項必須是事件,根據我的知識。但是這是'pkt_type': u'cbr'

我不知道是什麼問題?

+0

這是沒有問題的......一個'dict'沒有命令,沒有這樣的東西作爲你的'dict'第一個項目 –

+0

@gommb謝謝。當我嘗試使用OrderDict時,我無法使用dics [counter] ['event']。 –

+0

@JulienSpronck,謝謝。我需要訪問我的值,例如dics [3] ['event']。你有什麼想法嗎? –

回答

0

我在代碼中看到的一個問題是,應該爲每一行初始化line_dic(我在for循環中移動了line_dic = {})。沒有這些,你會覆蓋以前的字典。

dics = [] 
count = 0 

with codecs.open("trace.tr", "r", "UTF8") as inputFile: 
    inputFile=inputFile.readlines() 
for line in inputFile: 
    item = line.split(" "); 

    line_dic = {} 

    line_dic['event'] = item[0] 
    line_dic['time'] = item[1] 
    line_dic['from_node'] = item[2] 
    line_dic['to_node'] = item[3] 
    line_dic['pkt_type'] = item[4] 
    line_dic['pkt_size'] = item[5] 
    line_dic['flags'] = item[6] 
    line_dic['fid'] = item[7] 
    line_dic['srcadd'] = item[8] 
    line_dic['dstadd'] = item[9] 
    line_dic['seqnum'] = item[10] 
    line_dic['pkti'] = item[11] 

    dics.append(line_dic) 
print dics 

然後,應該沒有問題叫dics[3]['event']。您的字典不需要進行排序,以便進行該調用。

+0

不客氣:) –