2016-11-03 5 views
-1

私はこの非常に大きなテキストファイル(約2.5Gb)を持っています。これはPythonを使用して2列のnumpy配列をロードして配置する必要があります。テキストファイルのどこかで列の数が間違っているように見えるので、読み込めません。行の列数が間違っていますが、どの行も見つかりません

私はこの問題が発生した場所を正確に見つけるためにしようとしていますので、私はそれを修正することができます。しかし、私が得る行番号はあまり役に立たない。私はその行の最初の価値を得たいと思います。

ファイルには、次のようになります。

1.001 1 
1.002 0 
1.003 3 
1.004 1 
etc... 

私はこのようなファイルを開いています:だから私は、プログラムがクラッシュした場所でtを希望

import numpy as np 

with open('paths 8_10.txt', 'r') as paths_list: 
    for file_path in paths_list: 
     with open(file_path.strip(), 'r') as file: 
      data = np.loadtxt(file_path.strip()) 
      t = data[:,0]  
      x = data[:,1] 

を。

私はそれがロードを停止するところまで値を出力しますが、私はそれが仕事を得ることができないため、ループを考えていました。

+1

ここにトレースを投稿すると役立つかもしれません。 – Ajurna

+1

あなたはあまり助けにならないライン番号はなぜですか?それは、(最初​​の)問題行がどこにあるかを正確に示しています。 – DavidG

答えて

1

速度が問題ではない場合、私は次のように小規模なテストハーネスを書く勧め:

import csv 

with open('paths 8_10.txt', 'rb') as paths_list: 
    csv_reader = csv.reader(paths_list) 

    for line_number, line in enumerate(csv_reader, start=1): 
     if len(line) != 2: 
      print "Line {} has {} columns: {}".format(line_number, len(line), line) 

これはあなたのメインのスクリプトで使用するための固定必要があるエントリ識別できます。

必要な場合は、このアプローチは簡単ので、将来の使用のためにそれを固定し、誤った行をスキップしたり、余分な列を切り捨て、自動的にファイルを書き出すように拡張することができます。

+0

ありがとう!私はこれを試しましたが、何らかの理由でラインの形を認識しませんでした。私がしている場合:len(行)を印刷すると、長さが1行よりも長くなります。最初に列を分割する必要があると思いますか?どのようにするか知っていますか? – user90465

+0

それらの間にタブがありますか?もしそうなら、 'csv.reader(paths_list、delimiter = '\ t') 'に変更してください。 –

+0

うん、そうです。ありがとうございました! – user90465

関連する問題