2013-10-24 61 views
1

我最近跳出了矩阵实验室窗口,我试图让Python/Numpy/Scipy去做MatLab中我曾经做过的事情。到目前为止似乎非常好,但我正在努力的一件事是找到类似于MatLab中数据结构的东西。Python模拟MatLab数据结构

我想写一个通用代码,用于读取.xml文件,并根据它们是字符串,标量还是矩阵自动将变量分配到数据结构中。一个典型的XML文件将被分拆这样的:

<material> 
<id> 
1 
<\id> 
<E> 
17e4 
<\E> 
<var 2> 
'C:\data file path' 
<\var 2> 
<var 3> 
[1 2;3 4] 
<\var 3> 
<\material> 
<material> 
<id> 
2 
<\id> 
<var 1> 
17e4 
<\var 1> 
<var 2> 
'C:\data file path' 
<\var 2> 
<var 3> 
[1 2;3 4] 
<\var 3> 
<\material> 
... 
etc 

在Matlab中我就已经创建了一个数据结构是这样的:

Materials.1.E=17e4 
Materials.1.var2='C:\data file path' 
Materials.1.var3=[1 2;3 4] 
Materials.2.E=17e4 
Materials.2.var2='C:\data file path' 
Materials.2.var3=[1 2;3 4] 

如果在Python列表可以是2D(所以我可以拥有一行中每种材料的所有变量),或者字典可能具有多个图层或可能包含他们将是完美的列表,但我现在找不到我想要的东西!

任何帮助将不胜感激!

+4

你为什么不能在Python字典的名单? – Shai

+0

看看[这篇文章](http://stackoverflow.com/questions/1912434/how-do-i-parse-xml-in-python)关于使用Python解析XML可能是有用的。此外,如果您正在使用Python数据分析堆栈,那么我高度推荐使用[iPython](http://ipython.org/)和[pandas](http:// pandas .pydata.org /)。您可以将它们作为Continuum Analytics [Anaconda](http://store.continuum.io)Python分发的一部分。 – jeremiahbuddha

回答

6

正如Shai所建议的,你可以使用一个字典列表。为了您的例子,这会是这个样子:

Materials = [] 

Materials.append({'E': 17e4, 'var2': 'C:\\data file path', 'var3': [1, 2, 3, 4]}) 
Materials.append({'E': 17e4, 'var2': 'C:\data file path', 'var3':[1, 2,3, 4]}) 

print Materials[0]['var2'] 

它打印:

C:\data file path 
+0

感谢Molly,那正是我需要的。我从这样做的书中没有什么可以做到的,但我知道信息高速公路会为我而来! –