【问题标题】:using dictionary in python for parsing trace files在 python 中使用字典来解析跟踪文件
【发布时间】:2017-10-19 22:39:20
【问题描述】:

我将使用 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'

不知道是什么问题?

【问题讨论】:

  • 没问题...dict没有订单,你的dict中没有第一项这样的东西
  • @gommb 谢谢。当我尝试使用 OrderDict 时,我无法使用 dics[counter]['event']。
  • @JulienSpronc,谢谢。我需要访问我的值,例如 dics[3]['event']。你对此有什么想法吗?
  • 当您尝试访问dics[3]['event'] 时遇到什么错误?
  • 我得到了 KeyError 0。但我使用了 Julien 代码,一切正常。还是谢谢你。

标签: python arrays file parsing dictionary


【解决方案1】:

我在您的代码中看到的一个问题是应该为每一行初始化line_dic(我将line_dic = {} 移动到for 循环中)。否则,您将覆盖以前行的字典。

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']应该没有问题。您的 dict 不需要进行排序即可进行调用。

【讨论】:

    猜你喜欢
    • 2021-02-11
    • 2015-02-24
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多