我正在尝试将xml文件解析为csv文件。
但是当for...in...
条件嵌套20次以上时,出现此SyntaxError错误。
如何减少行数以避免此SyntaxError?
for time in root.findall('A'):
#print(time.text)
row=[]
row.append(time.text)
for time in root.findall('B'):
#print(time.text)
row.append(time.text)
for time in root.findall('C'):
row.append(time.text)
for time in root.findall('D'):
row.append(time.text)
for time in root.findall('E'):
row.append(time.text)
for time in root.findall('F'):
row.append(time.text)
for time in root.findall('G'):
row.append(time.text)
for time in root.findall('H'):
row.append(time.text)
for time in root.findall('I'):
row.append(time.text)
for time in root.findall('J'):
row.append(time.text)
for time in root.findall('K'):
row.append(time.text)
for time in root.findall('L'):
row.append(time.text)
for time in root.findall('M'):
row.append(time.text)
for time in root.findall('N'):
row.append(time.text)
for time in root.findall('O'):
row.append(time.text)
for time in root.findall('P'):
row.append(time.text)
for time in root.findall('Q'):
row.append(time.text)
for time in root.findall('R'):
row.append(time.text)
for time in root.findall('S'):
row.append(time.text)
for time in root.findall('T'):
row.append(time.text)
for time in root.findall('U'):
row.append(time.text)
csvwriter.writerow(row)
head = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
row = []
for headstr in head:
for value in root.findall(headstr):
row.append(value.text)
答案 0 :(得分:3)
无论您想做什么,都做得不好。如所写,随着每个循环的缩进距离越来越远,这会将 all B
个附加到 every A
(因此,如果有5个{ {1}}个条目和3个A
条目,您将拥有B
)。然后 all 所有这些条目之间的A1, B1, B2, B3, A2, B1, B2, B3, A3, B1, B2, B3, A4, B1, B2, B3, A5, B1, B2, B3
,依此类推。如果每种类型的数量为偶数2,则您的C
中将有超过一百万个元素;在每种类型的三个元素上,大约有35亿个条目(足以耗尽大多数家用计算机上的RAM),在四个类型上,超过一万亿个条目(足以破坏大多数超级计算机)。
我能想象到的唯一明智的代码根本不会嵌套循环。只需将所有循环都缩进相同的缩进级别,理想情况下,使其成为一个双嵌套循环,一个遍历要查找的事物,一个遍历所发现的事物:
list
这样就可以一次获得每种类型的所有唯一元素,只需更少的代码,并且不会发生组合爆炸。
您得到的错误基本上是在告诉您:“没有合理的代码会做您正在做的事情,重新考虑您的设计。”