我是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)中。 所以我理解每个新输出都被覆盖在现有输出上,只显示最终输出。我怎样才能避免这种情况并得到我想要的东西?
答案 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')