我正在尝试从xml文件中获取数据,使用1个xml文件,我的代码可以工作,并且我拥有所需的所有数据,但是当我尝试使用diferrents xml文件来获取代码时,它失败了,所有xml都有相同的元素和相同的位置。
我曾尝试在OS中使用glob和list dir,但无法正常工作,当我从终端执行python .py时,我什么也没有返回。
我的仅一个xml文件的工作代码:
import xml.etree.ElementTree as ET
tree = ET.parse('provaDmarcXml2.xml')
root = tree.getroot()
org_name = root[0][0].text
domain = root[1][0].text
LlistaSource_ip = []
LlistaDkim = []
LlistaSpf = []
for source_ip in root.iter('source_ip'):
sourceIp = source_ip.text
LlistaSource_ip.append(sourceIp)
for dkim in root.findall("./record/row/policy_evaluated/dkim"):
Dkim = dkim.text
LlistaDkim.append(Dkim)
for spf in root.findall("./record/row/policy_evaluated/spf"):
Spf = spf.text
LlistaSpf.append(Spf)
for c in range(len(LlistaSource_ip)):
print (org_name,"\t",end = "")
print (domain,"\t",end='')
print (LlistaSource_ip[c],"\t", end="")
print (LlistaDkim[c],"\t", end="")
print (LlistaSpf[c],"\t", end="")
print()
我的代码无法解析同一目录中的多个xml文件。
from os import listdir
import xml.etree.ElementTree as ET
for file in listdir("path to directory"):
with open(file, "rb"):
tree = ET.parse(data)
root = tree.getroot()
org_name = root[0][0].text
domain = root[1][0].text
LlistaSource_ip = []
LlistaDkim = []
LlistaSpf = []
for source_ip in root.iter('source_ip'):
sourceIp=source_ip.text
LlistaSource_ip.append(sourceIp)
for dkim in root.findall("./record/row/policy_evaluated/dkim"):
Dkim = dkim.text
LlistaDkim.append(Dkim)
for spf in root.findall("./record/row/policy_evaluated/spf"):
Spf = spf.text
LlistaSpf.append(Spf)
for c in range(len(LlistaSource_ip)):
print()
预期结果:
数据数据数据数据数据
数据数据数据数据
数据数据数据数据
数据数据数据数据
所有文件中的
我得到的错误:
回溯(最近通话最近): 第10行中的文件“ provaxmlPrograma2.py” 树= ET.parse(数据) NameError:未定义名称“数据”
或者如果我解决这个问题也不会返回我什么。
答案 0 :(得分:1)
open()语句中有一个小错误,您必须按如下所示进行定义。
您还可以添加检查 file.endswith(),以确保您只是尝试解析文件夹的xml文件。
from os import listdir
import xml.etree.ElementTree as ET
for file in listdir('path to file'):
if file.endswith('.xml') or file.endswith('.XML'):
with open(file, "rb") as data:
tree = ET.parse(data)
root = tree.getroot()
...