2016-10-24 15 views
0

私はcsv/txtファイルに保存されているデータを持っています。このタイプのデータをCSV/txtフォーマットで解析する

フォーマットは私がこれまでに働いていなかったものなので、私はこれについてどうやって行くのかという方向性を探していました。

約70MBのcsvファイルがあるので、私は効率的なものを探しています。データが構成されているか、それは私を与えるあなたが最初に見ることができるように

FMT, 128, 89, FMT, BBnNZ, Type,Length,Name,Format,Columns 
FMT, 130, 46, GPS, QBIHBcLLefffB, TimeUS,Status,GMS,GWk,NSats,HDop,Lat,Lng,Alt,Spd,GCrs,VZ,U 
FMT, 131, 46, GPS2, QBIHBcLLefffB, TimeUS,Status,GMS,GWk,NSats,HDop,Lat,Lng,Alt,Spd,GCrs,VZ,U 
FMT, 196, 24, GPA, QCCCCBI, TimeUS,VDop,HAcc,VAcc,SAcc,VV,SMS 
FMT, 197, 24, GPA2, QCCCCBI, TimeUS,VDop,HAcc,VAcc,SAcc,VV,SMS 
FMT, 132, 49, IMU, QffffffIIfBB, TimeUS,GyrX,GyrY,GyrZ,AccX,AccY,AccZ,ErrG,ErrA,Temp,GyHlt,AcHlt 

GPS, 288111438, 4, 408321800, 1919, 12, 0.81, 34.6724954, -118.3331596, 851.46, 0.07211103, 213.6901, 0.09, 1 
GPA, 288111438, 1.01, 0.86, 1.51, 0.28, 1, 288111 
SONR, 288111891, 0, 0, 0, 0 
RFND, 288111901, 0.00, 0.00 
IMU, 288132434, 0.01139331, 0.01001555, 0.0738163, 0.3783027, -1.865716, -9.70467, 0, 0, 49.00554, 1, 1 
IMU2, 288132434, 0.01213987, 0.01530177, 0.06975921, 0.3055397, -1.755074, -9.364305, 0, 0, 52, 1, 1 
SONR, 288132959, 0, 0, 0, 0 
RFND, 288132969, 0.00, 0.00 
ATT, 288133031, 0.00, 9.62, 0.00, -0.53, 0.00, 30.64, 0.02, 0.01 

データセットは次のようになります。 その後、キャプチャされるデータの頻度に応じて、そのパラメータがリストされ、対応する値になります。

キャプチャされる約800のパラメータがありますが、すべてを使用することはありません。私はちょうどそれらのいくつかを通常TimeUSにプロットします。

私は使用する各変数のリストを作成する必要があるのだろうかと思います。たとえば、IMUの場合、TimeUS, Guyrx, GuyrY..etcを運ぶ6つの列のリストがあります。

また、これで私を助けることができるpythonモジュールがある場合は、

編集:しかし、私はこのエラーを取得しています

import csv 
import matplotlib.pyplot as plt 

desiredData = 'IMU' 
data = [] 
with open('data2.csv', 'r') as csvfile: 
    content = csv.reader(csvfile, delimiter=',') 
    for row in content: 
     if desiredData == row[0]: 
      data.append(row[1]) 
fig1 = plt.figure(figsize= (10,10)) 
ax = fig1.add_subplot(111) 
mSec = data[:3] 
Alt = data[:4] 
ax.plot(mSec, Alt, label='Alt(m)', color = 'r') 
plt.legend(loc='best',prop={'size':10}) 
plt.grid(True) 
ax.set_xlabel('Time (s)') 
ax.set_ylabel('Alt (m)') 

:ここでは、私がこれまで持っているものさValueErrorをします。xとyは、同じ第1の次元を持っている必要があります。また、このコードを実行するのに少し時間がかかります。これは正常ですか?ここで

+0

正規表現をご存知ですか? https://docs.python.org/3/library/re.html – kame

+0

@kameこの方法では、手動で各ヘッダーを見つけてその行にあるデータをプルしますか?ヘッダーが行になく、列にある場合、実際にそれらのヘッダーを呼び出しますか? –

答えて

0

は、CSVファイルを解析するために私は考えることができるものの一部だ効率的

単純な文字列の分割はあなたが必要なフィールドを得るのを助ける、およびレコードを示すフィールドの値に基づいて、それらを解析する必要がありますフォーマット。

できるだけ多くの処理を処理するので、多くの値を保持したりメモリの占有面積を抑えたりする必要はありません。

可能であればmmapを使用します。これは、順次読み取りの方が高速です。

できるだけ積極的にディスクにデータをダンプして、メモリフットプリントを減らしてください。

+0

これまでメインページで行ってきたことを編集しました。これはあなたが意味することですか? –

関連する問題