【发布时间】:2016-08-14 22:43:38
【问题描述】:
我有一个包含两列的 csv 文件,其中包含来自示波器的测量值:
Model,MSO4034
Firmware Version,2.48
# ... (15 lines of header) ...
-5.0000000e-02,-0.0088
-4.9999990e-02,0.0116
-4.9999980e-02,0.006
-4.9999970e-02,-0.0028
-4.9999960e-02,-0.002
-4.9999950e-02,-0.0028
-4.9999940e-02,0.0092
-4.9999930e-02,-0.0072
-4.9999920e-02,-0.0008
-4.9999910e-02,-0.0056
我想将这些数据加载到一个 numpy 数组中。我可以使用np.loadtxt:
np.loadtxt('data.csv', delimiter=',', skiprows=15, usecols=[1])
但是,我的数据文件很大(100 个 MSamples),加载和解析 numpy 需要半个多小时(每 1000 行 21.5 毫秒)。
我的首选方法是直接为 numpy 创建一个Memory Map 文件,该文件仅由 二进制值组成,并连接到单个文件中。它基本上是内存中的数组,只是它不是在内存中,而是在磁盘上。
问题
有什么方便的方法吗? 使用Linux,我可以tail 去掉标题,cut 去掉第二列,但我仍然需要在将值写入磁盘上的二进制文件之前解析字符串表示:
$ tail -n +16 data.csv | cut -d',' -f2
-0.0088
0.0116
0.006
-0.0028
-0.002
-0.0028
0.0092
-0.0072
-0.0008
-0.0056
是否有任何 Linux 命令用于解析浮点数的字符串表示并将它们写入磁盘?
【问题讨论】:
-
无论发生什么,您至少需要将整个 csv 文件 通过 内存才能将其转换为二进制格式,但这仍然比将其全部保存在那里有所改进是一次。
-
您是否考虑过编写一个简单的 C 程序来生成二进制文件?
-
是的,我考虑过,我只是想知道是否已经有这样的程序。永远不要费心重新发明轮子......
标签: python linux csv numpy memory-mapped-files