vim 使用Python将空格““插入到表文件中以分隔列

pw136qt2  于 2022-11-11  发布在  Python
关注(0)|答案(2)|浏览(147)

我有一个表文件,看起来像这样:

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

正如您所看到的,有些值超出了预期的空间,需要去掉列之间的空间,导致我的代码无法读取文件,说明列比其余的少。
一个优点是我可以知道在文件的哪些确切列(可能发生在几个列中)发生这种情况,所以我可以实现一个代码或函数,在文件的每一行的这些列中插入一个空格。
我对写/阅读文件不是很熟悉,所以我猜上面的想法是解决这个问题的最简单的方法。干杯。

w8f9ii69

w8f9ii691#

在我看来,如果你不知道所有的“错误”都在哪里,你无论如何都要阅读整个文件。
如果这是真的,我会说你的方法(在第n列的每一行中添加一个空格)实际上是非常有效的。
我还建议研究一下Vim的块视觉模式。例如(从jubi修改而来):
1.转到您需要

  1. Ctrl + v(进入可视模式)
    1.使用箭头键选择行
  2. Shift + i(进入插入模式)
    1.点击空格键或任何你想在选定行前面键入的内容。
    1.保存更改(用途:w),现在您将看到所有选定行中的更改。
    下面是另一个来源:How to insert a block of white spaces starting at the cursor position in vi?
    希望它能起作用!
thtygnil

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文件。
第二种解决方法只有在您知道列中有多少位数时才有效(这里不是这种情况,因为在您提供的示例中有不同的位数)。
收到带有不同分隔符的文件后,您的数据应如下所示:

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

然后,您可以使用csvpandas.read_csv(),或者编写自定义代码,如下所示:

file_with_data = open("filename.txt", "r")
raw_data = file_with_data.read()
file_with_data.close()
rows = raw_data.split("\n")  #splitting whole file to list containing rows
for row in rows:
    print(row.split(";"))  # splitting row data into values based on the ; seperator

相关问题