1

我是 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)。所以我明白每个新输出都会覆盖现有输出,并且只显示最终输出。我怎样才能避免这种情况并得到我想要的?

4

1 回答 1

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')
于 2013-09-22T16:21:09.983 回答