2015-12-26 51 views
-1

我試圖找到一個文件,然後分析它,但我無法調用它在我的我的腳本的第二部分:使用Python 2.7 os.walk找到一個文件,然後解析該文件

from xml.dom import minidom 
import sys 
import os, fnmatch 


def find_files(directory, pattern): 
    for root, dirs, files in os.walk(directory): 
     for basename in files: 
      if fnmatch.fnmatch(basename, pattern): 
       filename = os.path.join(root, basename) 
       yield filename 

for filename in find_files('c:/Python27','*file.xml'): 
    print ('Found file.xml:', filename) 

def xmlparse(): 
    xmldoc = minidom.parse(filename) 
    itemlist = xmldoc.getElementsByTagName('Game') 
    for item in itemlist: 
     year = item.getElementsByTagName('Year') 
    for s in year: 
     print item.attributes['name'].value, s.attributes['value'].value 
+1

你有什麼樣的「麻煩」?例如,它是不是解析正確的文件? – cr3

+0

它根本沒有抓取文件。我沒有輸出。所以我想知道如果我在我的def xmlparse中使用正確的語法。我正在尋找文件名還是以另一種方式調用file.xml? – zooted

+0

您似乎沒有在xmlparse()中做任何事情,因爲您在函數外部有循環。我沒有看到'protocol'定義任何 –

回答

2

您可能需要更改xmlparse函數以將文件名作爲參數。你只需要在函數聲明改成這樣:

def xmlparse(filename): 

然後,你可能還需要從您的腳本中旬到腳本的底部移動你for循環。然後,您可以打電話xmlparsefind_files這樣返回的每個文件名:

for filename in find_files('c:/Python27','*file.xml'): 
    print ('Found file.xml:', filename) 
    xmlparse(filename) 

按照你最近編輯,您可能還需要每年而不只是去年在解決您xmlparse功能循環:

for item in itemlist: 
     year = item.getElementsByTagName('Year') 
     for s in year: 
      print item.attributes['name'].value, s.attributes['value'].value 
+0

解析函數中有很多錯誤,所以只是傳遞文件不會起作用 –

+0

當然,但至少解析函數將被調用,並且原始海報可能大概會從中取出。 – cr3

+0

我寧願等待OP回覆評論,也不願意添加仍然無法工作的答案 –