Python的csv阅读器一直在读同一个fi

2024-10-03 06:21:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python的csv阅读器有问题。问题是我想打开并读取不同的csv文件,但他总是读同一个。在

    from csv import reader

    alphabet = ["a", "b", "c"]
    for letter in alphabet:
       csv_file = open('/home/desktop/csv/' + letter + '.csv', 'r')
       csv_data = reader(csv_file)

问题是他似乎打开了其他文件,但他总是继续读第一个文件。在

有没有办法“清理”读卡器或让他读另一个文件?我甚至试图关闭csv文件,但没用。在

完整的代码是这样的

^{pr2}$

他打开了“爱迪莉西亚.csv“并编译”EDILIZIA.xml文件,那么他应该打开“伊甸园”-档案.csv“并编译它的xml,但当他阅读时,他继续阅读”爱迪莉西亚.csv““

这是你需要的.csv文件。在

http://pastebin.com/kJhL8HpK

如果你想让它先读爱迪莉西亚.csv然后伊迪尔-档案.csv他会一直使用爱迪莉西亚.csv但他应该先打开爱迪莉西亚.csv,编译EDILIZIA.xml文件,然后读这篇文章-档案.csv并编写EDILE-存档.xml. 在

如果您查看最后的xml,您将看到EDILE-存档.xml将只显示爱迪莉西亚.csv还有伊迪尔-档案.csv在


Tags: 文件csvinfromimportfor档案xml
2条回答

我想我可能已经找到你问题的原因了。在

corsi列表中的第二项以句号结尾。这意味着您将查找几乎不存在的文件“EDILE-ARCHIT..csv”。当您尝试打开文件时,open()调用将引发异常,程序将终止。在

尝试删除尾随的句号,然后重新运行它。在

花了很长时间才弄清楚你在这里做什么。说实话,你的代码一团糟——有许多未使用的变量和行根本没有意义。无论如何,您的代码每次都会读取相应的csv文件,因此错误并不是您认为的那样。在

如果我是对的,orario.csv包含三个学期或三年的每门课程的时间表(存储在corsi列表中),以及科索.csv文件包含存放受试者的房间。所以您需要将信息合并到一个XML文件中。在

你只忘了一件事:继续orario.csv。您的代码希望将前三个anno与当前的corso合并。要解决它,你必须做两个改变。在

在这个for循环头中的第一个:

for corso in corsi:

修改为:

^{pr2}$

当你分配lez

^{3}$

修改为:

lez = orario[i + a*12*(num+1)][j]

现在应该可以工作了。

这段代码生成的结果完全相同,但它使用Python的XML模块来构建输出文件:

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)

干杯。在

相关问题 更多 >