python - ValueError:对带有“with”块的缩进文件上的已关闭文件的 I/O 操作
问题描述
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 operation on closed file (对于行 writer.writerows(filedata))。我试图查找错误,但我发现的只是那些没有缩进他们的代码的人。但至少在我看来,这看起来不像是这里的问题。
编辑:示例输入
文件的第一行:"Datum","Uhrzeit","Zeitzone","Name","Typ","Status","Währung","Brutto","Gebühr","Netto","Absender E- Mail-Adresse”、“Empfänger E-Mail-Adresse”、“Transaktionscode”、“Lieferadresse”、“Adress-Status”、“Artikelbezeichnung”、“Artikelnummer”、“Versand- und Bearbeitungsgebühr”、“Versicherungsbetrag”、“Umsatzsteuer” ,"Option 1 Name","Option 1 Wert", "Option 2 Name","Option 2 Wert","Zugehöriger Transaktionscode", "Rechnungsnummer","Zollnummer","Anzahl","Empfangsnummer","Guthaben", "Adresszeile1","Adresszusatz","Ort","Bundesland","PLZ","Land","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 jjjjjjj Straße, aaaaaaaa, 55555, Deutschland", "Bestätigt", "1111111111111","11111111","0,00","","0,00","","","","","", "444444444444", "Lieferheld_DE:11111111111111111 :111111111:11111:11111111111:paypal","1","", "-12,35","111 jjjjjjj Straße","","aaaaaaaa","","555555","德国","","99999999999999","","DE","Soll"
解决方案
解决方案1:
内部带有开放块的变量“filedata”,它是csv对象。因此,一旦您离开此块,该文件将自动关闭,并且您在 2nd 中使用相同的文件数据对象和打开块。
最好取一个变量并将 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)
推荐阅读
- javascript - 自动选中复选框
- javascript - 解构赋值符号
- python - url 超出最大重试次数:'与 api.telegram.org 的连接超时。(连接超时=5.0)'))
- javascript - Bootstrap ICheck-Helper 事件在 jquery 步骤插件中不起作用
- javascript - React Native 中验证函数的意外结果
- php - 如何将服务管理器注入 Zend Framework 3 中的模型文件
- ios - 调用 'sorted(by:)' 的结果未使用
- julia - Julia:每当刷新路由时调用一个函数?
- kubernetes - GKE 中过度配置公式的两种不同解释
- pandas - Pandas 从行索引中查找特定字符串并将值返回到新列