Python 3.x 处理文件夹中的多个xml
我有几个结构相同的XML文件。我想从这些XML文件中读出一些数据 我写了一个脚本,在一个文件中做得很好。然后我尝试扩展我的脚本,以便它处理一个文件夹中的所有文件。我检查了几个类似的问题,并试图将其用于我的脚本,但我就是无法使其工作。我总是只处理第一个文件 这是我的密码:Python 3.x 处理文件夹中的多个xml,python-3.x,xml-parsing,Python 3.x,Xml Parsing,我有几个结构相同的XML文件。我想从这些XML文件中读出一些数据 我写了一个脚本,在一个文件中做得很好。然后我尝试扩展我的脚本,以便它处理一个文件夹中的所有文件。我检查了几个类似的问题,并试图将其用于我的脚本,但我就是无法使其工作。我总是只处理第一个文件 这是我的密码: import xml.etree.ElementTree as ET import csv import glob filenames = glob.glob('XML/*.xml') for filename in fil
import xml.etree.ElementTree as ET
import csv
import glob
filenames = glob.glob('XML/*.xml')
for filename in filenames:
with open(filename, 'r') as content:
tree = ET.parse(content)
root = tree.getroot()
Report_data = open('report.csv', 'w')
with Report_data:
csvwriter = csv.writer(Report_data)
report_head = []
report_head.append('DocumentId')
report_head.append('AgreementId')
report_head.append('Category')
report_head.append('Doctype')
csvwriter.writerow(report_head)
max = len(root[4])
i = 0
while i < max:
report = []
docid = root[4][i][0].text
report.append(docid)
agreementId = root[4][i][3][0][1].text
report.append(agreementId)
category = root[4][i][3][2][1].text
report.append(category)
docType = root[4][i][3][6][1].text
report.append(docType)
csvwriter.writerow(report)
i = i + 1
将xml.etree.ElementTree作为ET导入
导入csv
导入glob
filenames=glob.glob('XML/*.XML')
对于文件名中的文件名:
以open(filename,'r')作为内容:
tree=ET.parse(内容)
root=tree.getroot()
报告\数据=打开('Report.csv','w')
使用报告数据:
csvwriter=csv.writer(报告数据)
报告头=[]
报告头追加('DocumentId')
报告头追加('AgreementId')
报告头追加(‘类别’)
报告头追加('Doctype')
csvwriter.writerow(报告头)
max=len(根[4])
i=0
而我
如果打开report.csv,则只有来自第一个XML的数据存在。所有附加文件都被忽略。你知道我该怎么解决吗?任何帮助都将不胜感激。您在每个文件之后覆盖结果,因此所有文件都将被处理,只存储最后一个文件
Report_data = open('report.csv', 'w')
for filename in filenames:
with open(filename, 'r') as content:
tree = ET.parse(content)
root = tree.getroot()
应该修复它。在每个文件之后覆盖结果,因此所有文件都会被处理,只存储最后一个文件
Report_data = open('report.csv', 'w')
for filename in filenames:
with open(filename, 'r') as content:
tree = ET.parse(content)
root = tree.getroot()
应该会解决的。我能够解决我的问题。最后,我的代码如下所示:
import xml.etree.ElementTree as ET
import csv
import glob
filenames = glob.glob('*.xml')
print(filenames)
Report_data = open('report.csv', 'w')
with Report_data:
csvwriter = csv.writer(Report_data)
report_head = []
report_head.append('DocumentId')
report_head.append('AgreementId')
report_head.append('Category')
report_head.append('Doctype')
csvwriter.writerow(report_head)
for f in filenames:
with open(f, 'r') as content:
tree = ET.parse(content)
root = tree.getroot()
print(content)
Report_data = open('report.csv', 'a')
max = len(root[4])
i = 0
while i < max:
csvwriter = csv.writer(Report_data)
report = []
docid = root[4][i][0].text
report.append(docid)
agreementId = root[4][i][3][0][1].text
report.append(agreementId)
category = root[4][i][3][2][1].text
report.append(category)
docType = root[4][i][3][6][1].text
report.append(docType)
csvwriter.writerow(report)
i = i + 1
将xml.etree.ElementTree作为ET导入
导入csv
导入glob
filenames=glob.glob('*.xml')
打印(文件名)
报告\数据=打开('Report.csv','w')
使用报告数据:
csvwriter=csv.writer(报告数据)
报告头=[]
报告头追加('DocumentId')
报告头追加('AgreementId')
报告头追加(‘类别’)
报告头追加('Doctype')
csvwriter.writerow(报告头)
对于文件名中的f:
以开放式(f,'r')作为内容:
tree=ET.parse(内容)
root=tree.getroot()
打印(内容)
报告\数据=打开('Report.csv','a')
max=len(根[4])
i=0
而我
我能够解决我的问题。最后,我的代码如下所示:
import xml.etree.ElementTree as ET
import csv
import glob
filenames = glob.glob('*.xml')
print(filenames)
Report_data = open('report.csv', 'w')
with Report_data:
csvwriter = csv.writer(Report_data)
report_head = []
report_head.append('DocumentId')
report_head.append('AgreementId')
report_head.append('Category')
report_head.append('Doctype')
csvwriter.writerow(report_head)
for f in filenames:
with open(f, 'r') as content:
tree = ET.parse(content)
root = tree.getroot()
print(content)
Report_data = open('report.csv', 'a')
max = len(root[4])
i = 0
while i < max:
csvwriter = csv.writer(Report_data)
report = []
docid = root[4][i][0].text
report.append(docid)
agreementId = root[4][i][3][0][1].text
report.append(agreementId)
category = root[4][i][3][2][1].text
report.append(category)
docType = root[4][i][3][6][1].text
report.append(docType)
csvwriter.writerow(report)
i = i + 1
将xml.etree.ElementTree作为ET导入
导入csv
导入glob
filenames=glob.glob('*.xml')
打印(文件名)
报告\数据=打开('Report.csv','w')
使用报告数据:
csvwriter=csv.writer(报告数据)
报告头=[]
报告头追加('DocumentId')
报告头追加('AgreementId')
报告头追加(‘类别’)
报告头追加('Doctype')
csvwriter.writerow(报告头)
对于文件名中的f:
以开放式(f,'r')作为内容:
tree=ET.parse(内容)
root=tree.getroot()
打印(内容)
报告\数据=打开('Report.csv','a')
max=len(根[4])
i=0
而我
您能否修复缩进,使每个级别的空格数保持一致?你混合了4格缩进和单格缩进。哦,您的Report\u data=open('Report.csv','w')
和相应的csv设置应该在文件名中文件名的之前:
循环。欢迎使用Stackoverflow!你解释得很好。现在,为了让你的问题更完美,在最后用一句话把它说清楚,比如:“我怎样才能完成这件事?”。你会有更多的机会得到答案。谢谢你的提示。我相应地编辑了最后一部分。你能修正你的缩进,使每个级别有一致的空格数吗?你混合了4格缩进和单格缩进。哦,您的Report\u data=open('Report.csv','w')
和相应的csv设置应该在文件名中文件名的之前:
循环。欢迎使用Stackoverflow!你解释得很好。现在,为了让你的问题更完美,在最后用一句话把它说清楚,比如:“我怎样才能完成这件事?”。你会有更多的机会得到答案。谢谢你的提示。我相应地编辑了最后一部分。非常感谢你的建议。我更改了它,但现在我收到以下错误消息:ValueError:关闭文件上的I/O操作。您知道我必须更改什么才能使其正常工作吗?非常感谢您的建议。我更改了它,但现在我收到以下错误消息:ValueError:I/O操作关闭的文件。你知道我必须更改什么吗