以CSV / txt格式解析此类数据

时间:2016-10-24 15:57:28

标签: python csv

我有一个存储在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,将有一个包含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 :(得分:0)

这里有一些我能想到的有效解析csv文件的事情

简单的字符串拆分应该可以帮助您获取所需的字段,并根据指示记录格式的字段的值来解析它们。

尽可能多地处理计算,因此您不必保留很多值并保持较低的内存占用。

如果可能,使用mmap,这对于顺序读取更快。

尽可能主动地将内容转储到磁盘(数据库?)中,以再次减少内存占用。