-2
這個錯誤信息有什麼問題?我用Google搜索它,我仍然不知道ValueError:關閉的文件上的I/O操作 - 已經用GOOGLE搜索
ERROR MESSAGE Traceback (most recent call last): File "C:\Users\Acer\Desktop\Python Code Testing Bed\Function 6 - still in progress.py", line 33, in writer.writerow([id_, name, combinedaddress, dateprinter, timeprinter, ', '.join(ingredients), totalprinter.group(1)]) ValueError: I/O operation on closed file
import csv
from itertools import groupby
from operator import itemgetter
import re
with open("rofl.csv", "rb") as f, open("out.csv", "wb") as out:
reader = csv.reader(f)
next(reader)
writer = csv.writer(out)
writer.writerow(["Receipt ID","Name","Address","Date","Time","Items","Amount","Cost","Total"])
groups = groupby(csv.reader(f), key=itemgetter(0))
for k, v in groups:
v = list(v)
id_, name = v[0]
add_date_1, add_date_2 = [x[1] for x in v[1:3]]
combinedaddress = add_date_1+ " " +add_date_2
dateplustime = [ x[1] for x in v[4:8] ]
abcd = str(dateplustime)
dateprinter = re.search('(\d\d/\d\d/\d\d\d\d)\s(\d\d:\d\d)', abcd).group(1)
timeprinter = re.search('(\d\d/\d\d/\d\d\d\d)\s(\d\d:\d\d)', abcd).group(2)
transaction = [ x[1] for x in v[8:] ]
textwordfortransaction = str(transaction)
INGREDIENT_RE = re.compile(r"^\d+\s+([A-Za-z ]+)\s")
ingredients = []
for string in textwordfortransaction:
match = INGREDIENT_RE.match(string)
if match:
ingredients.append(match.groups())
continue
totalprinter = re.search(r"\bTOTAL\b\s*(\d*).",textwordfortransaction)
writer.writerow([id_, name, combinedaddress, dateprinter, timeprinter, ', '.join(ingredients), totalprinter.group(1)])
只需在最後2行之前添加4個空格。 這裏是關於'with'語句的好文章 http://effbot.org/zone/python-with-statement.htm –