在Excel中打印输出

时间:2013-09-22 15:51:21

标签: python excel xlwt

我是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)中。

e.g。如果我想要

A            B           C
D            E           F
G            H           I

我的输出

G            H           I

在(0,0),(0,1),(0,2)中。 所以我理解每个新输出都被覆盖在现有输出上,只显示最终输出。我怎样才能避免这种情况并得到我想要的东西?

1 个答案:

答案 0 :(得分: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')