我是QA测试人员,他是python的新手,试图创建一个脚本,从包含各种字段的CSV文件创建多个XML文件。我觉得我接近创建这个程序。不幸的是,我在添加代码以进入CSV文件中的下一行时遇到以下错误(line = next(reader))。如果我没有添加行来提前,程序将运行但多个xml将使用仅来自CSV文件第一行的信息创建文件。我无法弄清楚为什么或如何解决它。
错误讯息:
Traceback (most recent call last):
File "C:\Users\xxxxxxxxx\Desktop\defxmlImportcsv.py", line 22, in <module>
line = next(reader)
ValueError: I/O operation on closed file.
这是我的代码:
将xml.etree.ElementTree导入为etree import csv
with open('datanames.csv') as csvfile:
reader = csv.reader(csvfile)
x=0
line = next(reader)
line = next(reader)
while x<2:
filename = "Output"+str(x)+".xml"
[firstName,lastName] = line
print(line)
tree = etree.parse('WB5655(BR-09).xml')
root = tree.getroot()
registration_id=tree.find('primaryApplicant/ssn')
registration_id.text = str(53)
first_name = tree.find('primaryApplicant/firstName')
first_name.text = (line[0])
last_name = tree.find('primaryApplicant/lastName')
last_name.text =(line[1])
line = next(reader)
tree.write(filename)
print(x)
x=x+1
非常感谢任何帮助。提前谢谢。
答案 0 :(得分:2)
csvfile
块时, with
会自动关闭。这意味着reader
无法再从中读取,导致您的line = next(reader)
行失败。
最简单(也可能是最正确)的修复方法是在代码中添加缩进,以便while
循环 with
块。
答案 1 :(得分:1)
您退出了with
声明:
with open('datanames.csv') as csvfile:
reader = csv.reader(csvfile)
x=0
line = next(reader)
line = next(reader)
while x<2:
# ...
到达while
行的那一刻,csvfile
文件对象已关闭,因为从逻辑上讲,该块在之外 {1}}语句(与缩进不匹配)。
解决方法是将整个with
循环缩进到while
块内:
with
不要使用with open('datanames.csv') as csvfile:
reader = csv.reader(csvfile)
x=0
line = next(reader)
line = next(reader)
while x<2:
# ...
,而是使用while
循环两次:
itertools.islice()
我也简化了你的XML处理;例如,您不必两次读取输入XML树。