2011-07-20 90 views
5

我想打開一個目錄,其中包含一系列XML在一個特定的目錄中。
在下面的代碼中,我遍歷每個XML文檔,並設置一些「if語句」來讀取XML中的文本,查找關鍵字並替換它們,然後將新文件寫入新位置。
我收到以下錯誤,當我運行該腳本:類型'NoneType'的參數是不可迭代的

Traceback info: 
    File "Z:\ESRI\Python\Test Scripts\ElementTree6.py", line 62, in <module> 
    if "%begdate%" in element.text: 
     ... 

錯誤信息:

argument of type 'NoneType' is not iterable 

我已經硬編碼的目錄到一個特定的XML,當我通過if語句運行,他們工作正常。
這是當我嘗試設置迭代通過一系列我遇到錯誤的XML。
我通過本網站搜索,看看我是否可以最終解決方案,但所有的問題要麼是從我的不同,要麼我不是很理解解決方法。

我已經使用了多個打印行來測試輸出。
一切正常,直到我得到if語句,然後出現錯誤。

# Location of XML's 
folderPath = r"Z:\data" 

# set variable to store files with extension ".xml" 
for filename in glob.glob(os.path.join(folderPath, "*.xml")): 

fullpath = os.path.join(folderPath, filename) 

# find files and split the filename from the directory path 
if os.path.isfile(fullpath): 
    basename, filename2 = os.path.split(fullpath) 
    #print "Basename = " + basename 
    #print "Filename = " + filename2 

    # set variable to store XML structure from xml file 
    root = ElementTree(file=r"Z:\data\\" + filename2) 


    #Create an iterator 
    iter = root.getiterator() 
    #Iterate 
    for element in iter: 
     #print element.text 

      if "%begdate%" in element.text: 
      BEGDATE = element.text.replace("%begdate%", BEGDATEPARAM) 
      element.text = BEGDATE 
+1

這不會像編寫的那樣編譯 - 我認爲你的意思是這條線是左邊4個空格,與註釋掉的print element.text對齊。順便提一下,你有什麼看到這個未註釋的,BTW? –

回答

19

您會發現xml文檔中有許多元素不包含任何字符數據(即文本)。一個關於Python的好處之一是,沒有一個是在條件,耦合虛假,隨着短路怎樣的條件語句意味着有一個非常簡單的解決問題的方法的知識,改變行:

if "%begdate%" in element.text: 

到:

if element.text and "%begdate%" in element.text: 

時沒有文字,然後element.text是無,又名假,然後你甚至不會得到有條件的,這是造成錯誤的部分。

+3

+1:如果element.text中的element.text不是None和「%begdate%」,則更好: – jathanism

+0

嘿謝謝大家。這解決了我的問題。我會投票,但顯然我在這裏沒有足夠的聲譽。我感謝大家的快速回復! – Mike

1

您給出的錯誤會提示您正在迭代的標記之一不包含任何文本。
我認爲更好的方式來做到這一點檢查將是替換,如果有下列之一聲明:

if "%begdate%" == element.text: 
    #code goes here... 

import re 
if re.search("%begdate%", element.text): 
    #code goes here... 

第一個例子檢查平等,第二個使用一個regular expression,看看標籤包含您的串。我不確定正則表達式如何處理搜索空間None ......可能會失敗。

相關問題