ValueError:对带有“ with”块的缩进文件的关闭文件进行I / O操作

时间:2019-11-26 13:39:33

标签: python csv

with open('C:\\Users\\Download.csv', 'r') as file :
    filedata = csv.reader(file, delimiter=',', quotechar='|')
    for c in range(sum(1 for row in filedata)):
        for d in range(80):
            data_found = data_to_match.search(filedata)
            if data_found != None:
                data_found_new = str(data_found.group(0)).replace(',','.')
                filedata = filedata.replace(str(data_found.group(0)) , data_found_new)
        for e in range(80):
            data_found_2 = data_to_match_2.search(filedata)
            if data_found_2 != None:
                data_found_2_new = str(data_found_2.group(0)).replace(', ', '; ')
                filedata = filedata.replace(str(data_found_2.group(0)),data_found_2_new)

with open('C:\\Users\\Download.csv', 'w', newline='') as file2:
    writer = csv.writer(file2, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
    writer.writerows(filedata)

这给我带来了ValueError:对已关闭文件的I / O操作(针对writer.writerows(filedata)行)。我试图查找该错误,但发现的所有人都是没有缩进其代码的人。但是,就我的眼神来看,这似乎不是这里的问题。

编辑:示例输入

文件的第一行: “基准”,“ Uhrzeit”,“ Zeitzone”,“名称”,“ Typ”,“状态”,“Währung”,“ Brutto”,“Gebühr”, “ Netto”,“弃权电子邮件地址”,“Empfänger电子邮件地址”, “ Transaktionscode”,“ Lieferadresse”,“地址状态”, “ Artikelbezeichnung”,“ Artikelnummer”,“ Versand- andBearbeitungsgebühr”, “ Versicherungsbetrag”,“ Umsatzsteuer”,“ Option 1 Name”,“ Option 1 Wert”, “选项2名称”,“选项2磨损”,“ZugehörigerTransaktionscode”, “ Rechnungsnummer”,“ Zollnummer”,“ Anzahl”,“ Empfangsnummer”,“ Guthaben”, “ Adresszeile1”,“ Adresszusatz”,“ Ort”,“ Bundesland”,“ PLZ”,“土地”,“ Telefon”, “ Betreff”,“ Hinweis”,“Ländervorwahl”,“ Auswirkung auf Guthaben”

文件的第二行: “ 02.03.2019”,“ 11:25:51”,“ PST”,“ Delivery Hero Germany GmbH-Lieferheld”, “ PayPal Express-Zahlung”,“ Abgeschlossen”,“ EUR”,“-12,35”,“ 0,00”, “ -12,35”,“ jjjjjjj@gmail.com”,“ cc_finance@deliveryhero.com”,“ 00000000000”, “ 111 jjjjjjjStraße,aaaaaaaa,55555,德国”,“Bestätigt”, “ 1111111111111”,“ 11111111”,“ 0,00”,“”,“ 0,00”,“”,“”,“”,“”,“”, “ 444444444444”, “ Lieferheld_DE:11111111111111111:111111111:11111:11111111111:paypal”,“ 1”,“”, “ -12,35”,“ 111 jjjjjjjStraße”,“”,“ aaaaaaaa”,“”,“ 555555”,“德国” “”,“ 99999999999999”,“”,“ DE”,“ Soll”

1 个答案:

答案 0 :(得分:0)

解决方案1:

内部带有打开块的变量“文件数据”,它是csv对象。因此,一旦退出此块,该文件将自动关闭,并且您在第二个打开块中使用了相同的文件数据对象。

更好地获取一个变量,然后将csv对象的所有值放入并使用open块传入第二个。

f2 = []
with open('C:\\Users\\Download.csv', 'r') as file :
    filedata = csv.reader(file, delimiter=',', quotechar='|')
    for x in filedata:
        f2.append(x)

with open('C:\\Users\\Download.csv', 'w') as file2:
    writer = csv.writer(file2, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
    writer.writerows(f2)

解决方案2: 而不是在第一个块中打开,而仅使用打开。

f_obj = open('C:\\Users\\Download.csv', 'r')
filedata = csv.reader(f_obj, delimiter=',', quotechar='|')

with open('C:\\Users\\Download.csv', 'w') as file2:
    writer = csv.writer(file2, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
    writer.writerows(filedata)