我有一个表文件,看起来像这样:
3 5415.00 6.00 -1998.3 -781.28 21.98 9.99 3.41 21.63 0.94 1.29 0 -98.04 98.04
4 6443.00 6.00 -1998.3-1216.10 21.71 0.35 0.38 22.78 8.00 3.00 2 -98.04 98.04
5 5806.00 7.00 -1997.8 -946.67 21.04 0.19 0.19 23.26 6.27 0.97 0 2.23 -2.23
6 7882.00 8.00 -1997.4-1824.80 22.18 0.58 0.49 22.62 0.85 0.85 0 0.44 -0.44
7 3278.00 9.00 -1997.0 122.67 20.94 0.24 0.20 23.53 8.00 0.24 2 -98.04 98.04
正如您所看到的,有些值超出了预期的空间,需要去掉列之间的空间,导致我的代码无法读取文件,说明列比其余的少。
一个优点是我可以知道在文件的哪些确切列(可能发生在几个列中)发生这种情况,所以我可以实现一个代码或函数,在文件的每一行的这些列中插入一个空格。
我对写/阅读文件不是很熟悉,所以我猜上面的想法是解决这个问题的最简单的方法。干杯。
2条答案
按热度按时间w8f9ii691#
在我看来,如果你不知道所有的“错误”都在哪里,你无论如何都要阅读整个文件。
如果这是真的,我会说你的方法(在第n列的每一行中添加一个空格)实际上是非常有效的。
我还建议研究一下Vim的块视觉模式。例如(从jubi修改而来):
1.转到您需要
1.使用箭头键选择行
1.点击空格键或任何你想在选定行前面键入的内容。
1.保存更改(用途:w),现在您将看到所有选定行中的更改。
下面是另一个来源:How to insert a block of white spaces starting at the cursor position in vi?
希望它能起作用!
thtygnil2#
先做重要的事情。在生成文件后不可能解决此问题。假设您已将列合并到:
6 7882.00 8.00 -1997.41824.80 22.18 0.58 0.49 22.62 0.85 0.85 0 0.44 -0.44
。请注意-1997.41824.80
。无法将其拆分为两列。这里最好的方法是在原始文件中使用不同的列分隔符(在创建文件期间)-例如
;
,因为它不作为十进制分隔符使用,通常用于csv文件。第二种解决方法只有在您知道列中有多少位数时才有效(这里不是这种情况,因为在您提供的示例中有不同的位数)。
收到带有不同分隔符的文件后,您的数据应如下所示:
然后,您可以使用
csv
库pandas.read_csv()
,或者编写自定义代码,如下所示: