2017-12-01 29 views
1

現在、CSVファイルに浮動小数点数の2つの列を読み取り、各列の平均を見つけるためのスクリプトを作成しています。なぜ私のコードが閉鎖ファイルに対してValueError I/O操作を与えているのか分かりません。クローズドcsvファイルの操作ValueError、Pythonコード

私の理解のために、ファイルを閉じてからもう一度開き、2番目の列に平均値を追加する必要があります。

私のコードは以下のとおりですが、私はこれに得ることができるフィードバックを感謝します、それは私には意味がありません。ありがとうございました。

言語:Pythonの3.6

def main(): 
    import csv 

    file = input("What is the name of the file, dont forget the .csv: ") 
    INFILE = open(file,"r") 
    totalCol1 = 0 
    countCol1 = 0 
    totalCol2 = 0 
    countCol2 = 0 
    read = csv.reader(INFILE,lineterminator=",") 

    # Loop through column 1 
    for row in read: 
     totalCol1 += float(row[0]) 
     countCol1 += 1 
    averageCol1 = totalCol1/countCol1 
    INFILE.close() 

    INFILE = open(file,"r") 
    for row in read: 
     totalCol2 += float(row[1]) 
     countCol2 += 1 
    averageCol2 = totalCol2/countCol2 

    print('Average for Column One:%5.2f' % averageCol1) 
    print('Average for Column Two:%5.2f' % averageCol2) 
    INFILE.close() 

main() 
+0

ファイルを閉じてもう一度開く必要はありません。 1つのループ内のすべての列にアクセスできます – jdigital

+0

ありがとうございます@jdigital私は2つのループを必要とする考えをどこに持っているのか分かりません。助けてくれてありがとう – Matticus

答えて

2

私は何が起こっているのか疑いはあなたが閉じされることをcsv.readerするINFILEのインスタンスを渡すことです。したがって、ファイルを再び開いたときに、新しいインスタンスをcsv.readerに渡す必要があります。けれども言われて、あなたはファイルを閉じて再度開くことなく、最初のループでこのすべてを行うことができます

for row in read: 
    totalCol1 += float(row[0]) 
    countCol1 += 1 

    totalCol2 += float(row[1]) 
    countCol2 += 1 

averageCol1 = totalCol1/countCol1 
averageCol2 = totalCol2/countCol2 

またはあなただけのcsvファイルを読み込んで計算するパンダread_csvを使用することができますpandas meanを使って平均し、ループを避けてください(Pythonで価値のある努力をする)。

+0

パーフェクトありがとう、私は2つのループが必要だというアイデアがどこにあるのかわからない。助けてくれてありがとう – Matticus

関連する問題