簡體   English   中英

以CSV / txt格式解析此類數據

[英]Parsing this type of data in a CSV/txt format

我有一個存儲在csv / txt文件中的數據。

格式是我以前從未使用過的格式,因此我一直在尋找如何實現此目標的方向。

由於csv文件很大,大約70MB,因此我正在尋找可以提高效率的文件。

數據集看起來像這樣:

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,將有6列的列表,其中包含TimeUS, Guyrx, GuyrY..etc

還是如果有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必須具有相同的第一維。 運行此代碼也要花費一些時間。 這正常嗎?

這是我可以有效解析csv文件的一些方法

簡單的字符串拆分應該可以幫助您獲取所需的字段,並根據指示記錄格式的字段的值來解析它們。

盡可能多地處理計算,因此您不必保留大量的值並保持較低的內存占用。

如果可能,請使用mmap,這對於順序讀取來說更快。

盡可能主動地將內容轉儲到磁盤(數據庫?)中,以再次減少內存占用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM