我是YAML的新手,一直在寻找解析YAML文件和使用/访问解析后的YAML数据的方法.
我遇到了关于如何解析YAML文件的解释,例如,PyYAML 教程," 我如何在Python中解析YAML文件 "," 将Python dict转换为对象? ",但我没有找到的是关于如何从解析的YAML文件访问数据的简单示例.
假设我有一个YAML文件,例如:
treeroot:
branch1: branch1 text
branch2: branch2 text
Run Code Online (Sandbox Code Playgroud)
如何访问"branch1 text"文本?
" YAML解析和Python? "提供了一个解决方案,但是我在从更复杂的YAML文件访问数据时遇到了问题.而且,我想知道是否有一些标准的方法从解析的YAML文件访问数据,可能类似于" 树迭代 "或" 元素路径 "符号或解析XML文件时将使用的东西?
是否可以获取类的方法列表,然后在类的实例上调用方法?我遇到过编写类的方法列表的代码,但是我没有找到一个也调用类实例上的方法的例子.
鉴于课程:
class Test:
def methodOne(self):
print 'Executed method one'
def methodTwo(self):
print 'Executed method two'
Run Code Online (Sandbox Code Playgroud)
然后列出类的方法:
import inspect
a = Test()
methodList = [n for n, v in inspect.getmembers(a, inspect.ismethod)]
Run Code Online (Sandbox Code Playgroud)
我想methodList在类的实例上调用每个方法,例如:
for method in methodList:
a.method()
Run Code Online (Sandbox Code Playgroud)
结果相当于:
a.methodOne()
a.methodTwo()
Run Code Online (Sandbox Code Playgroud) 我对Python和编程有点新,所以我道歉.顺便说一句,提前谢谢.
我正在使用Python 2.5,cElementTree和expat解析一个xml文档(特别是在Google Earth中使用的kml).我试图从每个几何类型(即折线,多边形,点)的每个"地标"节点内的"名称","描述"和"坐标"节点中拉出所有文本,但我想保留几何类型分离.例如,对于作为"多边形"一部分的每个地标,我只需要"名称","描述"和"坐标"文本(即它具有"多边形"节点).我还需要为'折线'和'点'做这个.我已经找到了一种方法来做到这一点,但是代码很长并且特定于每种几何类型,这引出了我的问题.
理想情况下,我想为每种几何类型使用相同的代码,但问题是每种几何类型都有不同的节点结构(即不同的节点名称和嵌套节点的数量).因此,为了概念验证,我认为这将是一个使用/学习递归来深入挖掘'placemark'节点的节点树并获取我正在寻找的信息的好机会.我已经查看了许多关于Python递归的帖子,并且仍然遇到了实现所提供解决方案的问题.
"地标"节点的示例xml是:
<Placemark>
<name>testPolygon</name>
<description>polygon text</description>
<styleUrl>#msn_ylw-pushpin</styleUrl>
<Polygon>
<tessellate>1</tessellate>
<outerBoundaryIs>
<LinearRing>
<coordinates>
-81.4065,31.5072,0 -81.41269,31.45992,0 -81.34490,31.459696,0
</coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
Run Code Online (Sandbox Code Playgroud)
我使用的递归函数是:
def getCoords( child, searchNode ):
# Get children of node
children = child.getchildren()
# If node has one or more child
if len( children ) >= 1 :
# Loop through all the children
for child in children:
# call to recursion function
getCoords( child, searchNode )
# If does not have children and is …Run Code Online (Sandbox Code Playgroud) 我试图检查list-one中的项目是否在list-two中,如果是,则替换list-one中的项目(通过向其添加"_").需要注意的是,列表中的项目必须保持原始顺序.我已经找到了一种方法来使用嵌套的for循环和枚举,但我想知道是否有更高效/更快的方法,可能是列表理解或映射,如果合适的话?提前致谢.
清单是:
headers = ['Date', 'Temp', 'Descrip', 'ID', 'Lat', 'Long', 'FID']
replace = ['Date', 'ID', 'FID']
Run Code Online (Sandbox Code Playgroud)
我使用的代码是:
for rep in replace:
for index, head in enumerate(headers):
if rep == head:
headers[ index ] = headers[ index ] + '_'
Run Code Online (Sandbox Code Playgroud)
答案应该是:
['Date_', 'Temp', 'Descrip', 'ID_', 'Lat', 'Long', 'FID_']
Run Code Online (Sandbox Code Playgroud)