2017-08-08 163 views
2

这应该是非常容易的,但我现在已经停留了一个小时,没有结束。我在python中使用simplekml模块,如果不存在,我想创建一个文件夹。无论如何我无法找到一个文件夹是否已经存在,而无需创建for循环。我会认为下面会起作用,但当然不会。检查文件夹是否存在于simplekml中 - python

kml = simplekml.Kml() 
    testfold = kml.newfolder(name = 'testfolder') 
    testfold2 = kml.newfolder(name = 'testfolder2') 

    if 'testfolder' in kml.containers: 
     print True 

似乎返回折名称的唯一事情是:

for x in kml.containers: 
    print x.name 

但我当然不希望通过在KML文件中的每个容器然后写之前,寻找一个文件夹循环如果没有找到。请告诉我有更好的办法?

回答

1

这是因为,kml.containers拥有类simplekml.featgeom.Folder的对象列表和name是该类的一个属性!

因此,当您检查if 'testfolder' in kml.containers时,它将返回false!您必须获取该容器的name属性中的值,然后检查是否testfolder

>>> [each for each in kml.containers] 
[<simplekml.featgeom.Folder object at 0x2ac156d8e910>, <simplekml.featgeom.Folder object at 0x2ac156d8e890>] 
>>> [x.name for x in kml.containers] 
['testfolder', 'testfolder2'] 
>>> True if 'testfolder' in [x.name for x in kml.containers] else False 
True 
+0

谢谢Keerthana。一个问题,这是否也会循环所有“点”?换句话说,如果每次我添加一个点时,我必须循环遍历所有点和文件夹以查找文件夹,但添加大量点时可能会非常缓慢。 –

+0

我明白了。如果每次循环访问kml.containers,肯定会有开销。我建议将点添加到列表中,并且在添加新点时添加到列表中。所以,比较你可以使用更新的列表! –

相关问题