2013-09-22 1 views
1

Я новичок в Python. Я хочу получить значение тега из нескольких xml-файлов и распечатать его на листе excel. Я попробовал и получил скрипт, отлично работающий, кроме части печати Excel.Печать вывода в Excel

Вот мой сценарий

from xml.dom.minidom import parse, parseString 
import xlwt 
import os 
def sh(dir): 
for r,d,f in os.walk(dir): 
    n=0 
    for files in f: 
     if files.endswith(".xml"): 
      print files 
      dom=parse(os.path.join(r, files)) 
      name = dom.getElementsByTagName('rev') 
      title = dom.getElementsByTagName('title') 
      a=xlwt.Workbook() 
      sheet=a.add_sheet('sheet1') 
      sheet.write(n, 0, files) 
      sheet.write(n, 1, title[0].firstChild.nodeValue) 
      sheet.write(n, 2, name[0].firstChild.nodeValue) 
      n=n+1 
      a.save('sha.xls') 
      print title[0].firstChild.nodeValue 
      print name[0].firstChild.nodeValue 

sh("path") 

Проблема я застрял с это, вывод печатается в только в этих столбцах (0, 0), (0, 1), (0,2).

например. если я хочу

A   B   C 
D   E   F 
G   H   I 

версию своей работы

G   H   I 

в (0,0), (0,1), (0,2). Итак, я понял, что каждый новый выход переопределяется на существующем, и отображается только конечный вывод. Как я могу избежать этого и получить то, что я хотел?

ответ

1

Вы должны определить вашу книгу и лист вне цикла:

def sh(dir): 
    a = xlwt.Workbook() 
    sheet = a.add_sheet('sheet1') 
    n = 0 
    for r,d,f in os.walk(dir): 
     for files in f: 
      if files.endswith(".xml"): 
       print files 
       dom=parse(os.path.join(r, files)) 
       name = dom.getElementsByTagName('rev') 
       title = dom.getElementsByTagName('title') 
       sheet.write(n, 0, files) 
       sheet.write(n, 1, title[0].firstChild.nodeValue) 
       sheet.write(n, 2, name[0].firstChild.nodeValue) 
       n += 1 
       print title[0].firstChild.nodeValue 
       print name[0].firstChild.nodeValue 
    a.save('sha.xls') 

Кроме того, если вам не нужно искать XML-файлов внутри подкаталогов, рассмотреть вопрос о переходе на glob.glob() вместо использования os.walk():

def sh(dir): 
    a = xlwt.Workbook() 
    sheet = a.add_sheet('sheet1') 
    n = 0 
    for f in glob.glob(os.path.join(dir, '*.xml')): 
     dom = parse(os.path.join(dir, f)) 
     name = dom.getElementsByTagName('rev') 
     title = dom.getElementsByTagName('title') 
     sheet.write(n, 0, f) 
     sheet.write(n, 1, title[0].firstChild.nodeValue) 
     sheet.write(n, 2, name[0].firstChild.nodeValue) 
     n += 1 
    a.save('sha.xls') 
+0

Большое вам спасибо. Это работало нормально. Я не знал формат glob.glob(), попытаюсь использовать это. Еще раз спасибо..:) –