2017-08-08 165 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,肯定會有開銷。我建議將點添加到列表中,並且在添加新點時添加到列表中。所以,比較你可以使用更新的列表! –

相關問題