<p>花了很长时间才弄清楚你在这里做什么。说实话,你的代码一团糟——有许多未使用的变量和行根本没有意义。无论如何,您的代码每次都会读取相应的csv文件,因此错误并不是您认为的那样。在</p>
<p>如果我是对的,<code>orario.csv</code>包含三个学期或三年的每门课程的时间表(存储在<code>corsi</code>列表中),以及<em>科索.csv</em>文件包含存放受试者的房间。所以您需要将信息合并到一个XML文件中。在</p>
<p>你只忘了一件事:继续<code>orario.csv</code>。您的代码希望将前三个anno与当前的<code>corso</code>合并。要解决它,你必须做两个改变。在</p>
<p>在这个<code>for</code>循环头中的第一个:</p>
<pre><code>for corso in corsi:
</code></pre>
<p>修改为:</p>
^{pr2}$
<p>当你分配<code>lez</code>:</p>
^{3}$
<p>修改为:</p>
<pre><code>lez = orario[i + a*12*(num+1)][j]
</code></pre>
<p><strong>现在应该可以工作了。</strong></p>
<p>这段代码生成的结果完全相同,但它使用Python的XML模块来构建输出文件:</p>
<pre><code>from csv import reader
import xml.etree.cElementTree as ET
import xml.dom.minidom as DOM
corsi = ["EDILIZIA", "EDILE-ARCHIT", "ELETTRONICA", "TECNOLOGIE_DI_INTERNET", "INFORMATICA", "GESTIONALE", "ENERGETICA", "MECCANICA", "CIVILE_ED_AMBIENTALE", "MEDICA", "ENGINEERING_SCIENCES"]
with open('orario.csv', 'r') as orario_csv:
orario = reader(orario_csv)
orario_data = [ row for row in orario ]
for num, corso in enumerate(corsi):
with open(corso + '.csv', 'r') as corso_csv:
corso_raw = reader(corso_csv)
corso_data = [ row for row in corso_raw ]
root_elem = ET.Element('orario')
corso_elem = ET.SubElement(root_elem, 'corso')
corso_elem.set('name', corso)
for anno in range(0, 3):
anno_elem = ET.SubElement(corso_elem, 'anno')
anno_elem.set('num', str(anno + 1))
for giorno in range(1, 6):
giorno_elem = ET.SubElement(anno_elem, 'giorno')
giorno_elem.set('name', orario_data[2][giorno])
for lezione in range(3, 12):
lez = orario_data[lezione + anno * 12 * (num + 1)][giorno]
if lez == '':
lezione_elem = ET.SubElement(giorno_elem, 'lezione')
lezione_elem.text = '-'
else:
for riga in corso_data:
if riga[0] == lez:
if riga[2] == '':
lezione_elem = ET.SubElement(giorno_elem, 'lezione')
lezione_elem.set('name', lez)
lezione_elem.text = riga[1]
else:
for g in range(0, len(riga)):
if riga[g].lower() == orario_data[2][giorno].lower():
lezione_elem = ET.SubElement(giorno_elem, 'lezione')
lezione_elem.set('name', lez)
lezione_elem.text = riga[g + 1]
with open(corso + '_new.xml', 'w') as corso_xml:
xml_data = DOM.parseString(ET.tostring(root_elem, method = 'xml')).toprettyxml(indent = ' ')
corso_xml.write(xml_data)
</code></pre>
<p>干杯。在</p>