【发布时间】:2020-01-13 05:18:13
【问题描述】:
我有几个结构相同的 XML 文件。我想从这些 XML 文件中读出一些数据。
我写了一个脚本,它对一个文件做得很好。然后我尝试扩展我的脚本,以便它处理一个文件夹中的所有文件。我检查了几个类似的问题并尝试将其用于我的脚本,但我就是无法让它工作。我总是只处理第一个文件。
这是我的代码:
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
如果我打开 report.csv,那里只有第一个 XML 中的数据。所有其他文件都将被忽略。知道我该如何解决吗?任何帮助将不胜感激。
【问题讨论】:
-
你能修正你的缩进,使每个级别的空格数一致吗?您正在混合使用 4 空格缩进和单空格缩进。哦,你的
Report_data = open('report.csv', 'w')和相应的 csv 设置应该在你的for filename in filenames:循环之前。 -
欢迎来到 Stackoverflow!你很好地解释了你做了什么。现在,为了使您的问题完美,请在最后声明清楚,例如:“我怎样才能完成这项工作?”。您将有更多机会得到答案。
-
感谢您的提示。我相应地编辑了最后一部分。