清理CSV(文物和间距不足)

时间:2017-06-20 20:52:04

标签: linux python-3.x csv

我的数据是这种形式。你可以看到第3列(如果从0开始,则为第2列)触及之前的值,当它的值上升到下一个数量级时。以及最后一列中未记录任何数据输入的工件。

17:10:39 2.039 26.84 4.6371E-9    -0.7$R200$O100
17:10:41 2.082 27.04 4.6334E-9    -0.4
17:10:43 1.980 26.97 4.6461E-9     0.3
17:10:45 2.031 26.87 4.6502E-9     1.0$R200
17:10:47 2.090 27.09 4.6296E-9     0.1
...
18:49:40 1.930226.34 2.8246E-5     7.1
18:49:42 2.031226.04 2.8264E-5     8.2

现在我通过添加“|”手动修复了这一切取而代之的是“”,并切掉了少数文物,但这是一种痛苦。

因此,在未来从同一台机器获取更大的数据集的前景,是否有任何关于如何在python中编写脚本的提示,或者是否有任何基于Linux的工具已经在那里修复此csv / make一个新的固定csv出于此?

2 个答案:

答案 0 :(得分:0)

在linux shell中:

cut -c 1-14 data.csv > DataA
cut -c 15-49 data.csv > DataB
paste DataA DataB | tr -s " " "\t" > DataC
  1. 将csv切割成两部分,交叉点位于它们触摸的位置,在第二部分中我们还删除了添加的不需要的工件。
  2. 将它们粘贴在一起,并在粘贴添加标签
  3. 时更改标签的分隔符

    现在万一我们想要坚持“|”分隔符的下一步可能是

    cat DataC | tr -s "\t" "|" > DataFinal
    rm DataA DataB DataC
    

    但这纯粹是可选的

答案 1 :(得分:0)

您显示的数据不是csv(或dsv),而是具有固定字段宽度的纯文本数据。尝试将其读作csv将容易出错。

相反,此数据应以固定宽度处理,并具有以下字段宽度:

8 / 6 / 6 / 10 (or 11) / 8 (or 7) / rest of line

请参阅this question,了解如何在Python中解析固定宽度字段。