我已经为工作相关的事情探索了一个基于XML的API,它来自仓库数据。理想情况下,我想用python和pandas做一些分析。在
Aggregate(aggregate_dimension_value_list=[ DateAggregateDimensionValue(value=datetime.datetime(2013, 8, 28, 19, 30, tzinfo= UTC )) , None, StringAggregateDimensionValue(value=u'VIRTUALLY_LABELED_CASE') ], quantity=127) ,
Aggregate(aggregate_dimension_value_list=[ DateAggregateDimensionValue(value=datetime.datetime(2013, 8, 28, 19, 30, tzinfo= UTC )) , StringAggregateDimensionValue(value=u'PPTransMergeNonCon') , StringAggregateDimensionValue(value=u'PRIME_BIN_RANDOM_STOW') ], quantity=15)
Aggregate(aggregate_dimension_value_list=[ DateAggregateDimensionValue(value=datetime.datetime(2013, 8, 27, 21, 0, tzinfo= UTC )) , StringAggregateDimensionValue(value=u'PPTransFRA1') , StringAggregateDimensionValue(value=u'PRIME_BIN_RANDOM_STOW') ], quantity=8) ,
在我用VIM进行了一些查找和替换之后,数据看起来像上面的流(我知道我可以用python编写脚本)。我怎样才能最好地把这种奇怪的格式变成熊猫呢?理想情况下,我需要datetime、String aggregatedimension值和数量。但是有很多没有,在这个解析中需要的数据。 在数据帧中,做一些分析会很容易,但我在这里有点困惑(感觉很像n00b)。在
编辑: 这是我得到并想要解析的未经修正和未替换的数据。它不是真正的XML,所以XML不起作用。在
^{pr2}$
如果您更喜欢类似于解析器的东西,下面是针对您的问题的pyparsing工具:
使用
^{pr2}$lineexpr.searchString
从每个聚合中提取数据:给予:
dump()
将显示所有可用的命名结果值-请注意如何使用data.qty
直接访问quantity属性。这是用"quantity=" + intvalue("qty")
中的结果名“qty”的定义为您设置的。timestamp
、s1
和{eval
,清理这些内容是留给读者的练习。)编辑:
这里是修改后的pyparsing解析器,用于处理原始的XML类内容。变化真的很小:
^{4}$从您粘贴的文本(其中一些文本格式错误)中可以看到:
您可以为}定义最小类,然后
Aggregate
、DateAggregateDimensionValue
、和{eval
依次为每一行定义:使用这些最小类来
^{pr2}$eval
输入字符串:给出:
当然,这与使用
eval
有关的所有常见警告一起出现,例如小心任何可能的恶意代码注入。但是我怀疑你自己已经控制了这个输入文件,所以如果你注入你自己的恶意代码,你只能怪你自己。在相关问题 更多 >
编程相关推荐