2017-10-10 6 views
0

以下のcsvファイルのデータを辞書にプルしようとしていますが、コードがクローズファイルエラーの操作を返します。この時点でデータを辞書にプルするときにファイルエラーを閉じる

enter image description here

LotrGrade = {} 

with open('grade_list_large.csv', 'r') as FOpen: 
    line = FOpen.readline() 
    LotrGrade = {} 


for line in FOpen: 
    grades = [] 
    line = line.rstrip() 
    Name = line.split(',') 
    NameKey = Name[0] 
    GradeValu = list(Name[1]) 
    while True: 
     if NameKey in LotrGrade.keys()== True: 
      LotrGrade.setdefault(NameKey).append(GradeValu) 
     else: 
      LotrGrade[NameKey] = GradeValu 

    else: 
     False 
     print(LotrGrade) 

答えて

0

問題1

with open('grade_list_large.csv', 'r') as FOpen: 
     line = FOpen.readline() 
     LotrGrade = {} 

、あなたはインデントされたブロックの後にファイルFOpen1を閉じます。あなたは、Python docs

をチェックする場合は、ファイルを オブジェクトを扱う際のキーワードと一緒に使用することをお勧めします。これは、例外は、あなたがこの行にFOpen1にアクセスすることができない方法でそう

for line in FOpen 

読み取るために提起されている場合でも、ファイルが正しく そのスイートが終了した後に閉じられている利点を持っていますあなたが既にそれを閉じたので、ファイル内の行。

号2

次の文は、基本的に

with open('grade_list_large.csv', 'r') as FOpen: 
    line = FOpen.readline() 
    LotrGrade = {} 

どんな意味がありません、あなたは、ファイルを開くlineにそこから1行を読んで、それを閉じます。現在のところ、ファイルから最初の行を読み終えたばかりです。 ファイルを開くためにwithキーワードを使用する場合、それは自動的にファイルをクローズしますので、あなたは、あなたが後でループ上lines

として
for line in lines: 
    # do something 
0

を通じてこれが起こっている可能

with open('grade_list_large.csv', 'r') as FOpen: 
    lines = FOpen.readlines() 
    LotrGrade = {} 

にこれらのステートメントを変更した場合withブロックの終わりです。

FOpenが閉じられているので、for line in FOpen:でエラーが発生しています。

これを解決するには、すべてのロジックをwith文に移動する(スクリプトの実行中にファイルを開いたままにする)か、ファイルを閉じる前にファイルからリストにデータを解析しますファイルを開いてデータを読み込んで閉じます)。私は後者が好きですが、それはあなた次第です。次に、2番目のアプローチの例を示します。

data = [] 
open('grade_list_large.csv', 'r') as FOpen: 
    for line in FOpen: 
     data.append(line) 
    LotrGrade = {} 

for d in data: 
    # do some work 
関連する問題