2017-10-10 3 views
0

.csvファイルを繰り返し処理し、それに基づいて計算を実行しようとしています。私の問題はファイルが10001行であり、プログラムが実行されたときだけですそれらの行の5001を読んでください。私のデータを読み込む際に何か間違っているのですか、メモリの制限や、何か別の制限がありますか?計算はうまくいっていますが、いくつかの例で期待された結果から外れているため、データの欠落がこの問題を解決すると信じています。Python forループは、ファイルの半分だけを読み取る

fileName = 'normal.csv' #input("Enter a file name: ").strip() 
file = open(fileName, 'r') #open the file for reading 
header = file.readline().strip().split(',') #Get the header line 
data = [] #Initialise the dataset 
for index in range(len(header)): 
    data.append([]) 
for yy in file: 
    ln = file.readline().strip().split(',') #Store the line 
    for xx in range(len(data)): 
     data[xx].append(float(ln[xx])) 

そして、ここでいくつかのサンプル出力され、まだcompletleyフォーマットするが、それは最終的には次のようになります。

"""The file normal.csv contains 3 columns and 5000 records. 
     Column Heading |  Mean  |  Std. Dev.  
     --------------------+--------------------+-------------------- 
     Width [mm]|999.9797|2.5273 
     Height [mm]|499.9662|1.6889 
     Thickness [mm]|12.0000|0.1869""" 

これは、私はあなたが役に立つ応答を維持しようとしなくあからさまなことを求めるだろう宿題であるため解決策、ありがとう。

+0

AFAICTは、あなたが一回の反復で2行を読んでいます。 "yy"には既に行が含まれており、 "file.readline"を呼び出すと次の行に移動します。 readlineを呼び出さずに "yy"の内容を直接処理する必要があります。 – schaazzz

答えて

2

あなたは2つの異なる場所で行を読み取るためのPythonを求めているためです。

for yy in file: 

ln = file.readline().strip().split(',') #Store the line 

yyはすでにファイルから行ですが、あなたはそれを無視。ファイルオブジェクトに対する繰り返しは、ファイルから行を生成します。 file.readline()を使って別の行を読みます。

あなたが繰り返しを使用している場合は、単にyyを使用し、同様readline()を使用しないでください。

for yy in file: 
    ln = yy.strip().split(',') #Store the line 

ます。ただし、CSV-読書ホイールを再発明しています。代わりにcsv moduleを使用してください。

あなたは、いくつかのzip() functiontrickeryと列ごとにリストにCSVファイル内のすべてのデータを読み取ることができます。

import csv 

with open(fileName, 'r', newline='') as csvfile: 
    reader = csv.reader(csvfile, quoting=csv.QUOTE_NONNUMERIC) # convert to float 
    header = next(reader, None) # read one row, the header, or None 
    data = list(zip(*reader)) # transpose rows to columns 
+0

それはそれをしました。ありがとう。 split( '、') '魅力のように働きます。ln = file.readline()。strip()をsplit( '、')'からln = yy.strip – brodieR

+0

車輪を再発明することは、それがほとんどのコンプスイコースに伴うものですが、ヘッドアップに感謝します。 – brodieR

関連する問題