在python中使用字典解析跟踪文件
问题描述:
我将使用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'
!
我不知道是什么问题?
答
我在代码中看到的一个问题是,应该为每一行初始化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
不客气:) –
这是没有问题的......一个'dict'没有命令,没有这样的东西作为你的'dict'第一个项目 –
@gommb谢谢。当我尝试使用OrderDict时,我无法使用dics [counter] ['event']。 –
@JulienSpronck,谢谢。我需要访问我的值,例如dics [3] ['event']。你有什么想法吗? –