Печать вывода в Excel

Я новичок в Python. Я хочу получить значение тега из нескольких XML-файлов и распечатать его на листе 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). Итак, я понял, что каждый новый вывод переопределяется существующим, и отображается только окончательный вывод. Как мне избежать этого и получить то, что я хотел?


person Shahul Hameed    schedule 22.09.2013    source источник


Ответы (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')
person alecxe    schedule 22.09.2013
comment
Большое спасибо. Он работал нормально. Я не знал формат glob.glob(), попробую использовать его. Еще раз спасибо..:) - person Shahul Hameed; 22.09.2013