2017-04-10 9 views
0

Pythonのエラー:パイソンとValueError:閉じられたファイルのI/O操作、私はPythonのエラー:パイソンとValueError:閉じられたファイルのI/O操作

しようとしていますコード

import random 

with open("GoneGirlSW.txt", "r") as f,open('trainData.txt','w') as trainFile,open('testData.txt','w') as testFile: 
    data = f.read().split('\n') 
    random.shuffle(data) 
    train_data = data[:50] 
    test_data = data[50:] 

    trainFile.write(str(train_data)) 
    testFile.write(str(test_data)) 

しかし、それは誤り

を与えています
Traceback (most recent call last): 
    File "trainTest.py", line 9, in <module> 
    trainFile.write(str(train_data)) 
ValueError: I/O operation on closed file. 
+0

インデントされなければならない "trainFile.write(STR(train_dataは))" "と" サイドアウトであるように見えます。 –

+1

"with"は、スコープの外側にあるファイルを自動的に閉じます。 –

+0

Perhpasあなたは私の答え(または誰か他の人がしたこと)に応じてコードを編集しましたか?あなたが現在リストしているバージョンが実際にあなたが報告している問題を実証するかどうかは疑問です... – holdenweb

答えて

0

with/as文が完了すると、ファイルは自動的に閉じられます。あなたの場合、with/as文はインデントがないためすぐにとなります。コードは次のようになります。

with open("GoneGirlSW.txt", "r") as f,open('trainData.txt','w') as trainFile,open('testData.txt','w') as testFile: 
    data = f.read().split('\n') 
    random.shuffle(data) 
    train_data = data[:50] 
    test_data = data[50:] 

    trainFile.write(str(train_data)) 
    testFile.write(str(test_data)) 
1

知ることは困難ランダム 輸入を、あなたのコードが正しくインデント表示されませんので、。私はあなたがまだ質問の編集に精通していないのでこれが仮定しています。

withステートメントの目的は、既知のコンテキストでコードを実行できるようにすることです。ファイルを開く場合、インデントされたスイートの最後にファイルが閉じられていることが保証されます。だから私は最後の2つのステートメントがインデントされていないと推測しているので、それらはwithのコードの一部です。 with文の後にコードの

関連する問題