2016-09-28 11 views
-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)]) 
+0

最後の2行の前に4つのスペースを追加するだけです。 ここに 'with'ステートメントについての良い記事です http://effbot.org/zone/python-with-statement.htm –

答えて

0

を持っていない:

with open("rofl.csv", "rb") as f, open("out.csv", "wb") as out: 

withブロックは、コンテキストを確立します。このコンテキストが残るとすぐに、ファイルは閉じられます。これは:

writer.writerow([id_, name, combinedaddress, dateprinter, timeprinter, ', '.join(ingredients), totalprinter.group(1)]) 

...はwithブロックの外です。 withブロックが終了したため、プログラムがこのステートメントに到達するまでにファイルが閉じられました。

write.writerowをインデントブロックwithにインデントします。

関連する問題