使用 Python 将空格“”插入 table 文件以分隔列
Inserting spaces " " into a table file using Python to separate columns
我有一个 table 文件,如下所示:
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
如您所见,某些值超出了预期的 space 它应该去掉列之间的 space ,导致我的代码无法读取文件,在那里说明比其他列少。
一个优点是我可以知道发生这种情况的文件的确切列(可能发生在几个列中),因此我可以实现一个代码或函数,将 space 插入这些列的每一行文件。
我对 writing/reading 文件不是很熟悉,所以我猜上面的想法是解决这个问题的最简单方法。干杯。
在我看来,如果您不确切地知道所有“错误”在哪里,您将不得不阅读整个文件。
就此而言,我想说您的方法(在第 n 列的每一行中添加 space)实际上非常有效。
我还建议研究 Vim 的块视觉模式。
例如(修改自jubi):
- 转到您需要的栏目
- Ctrl + v(进入可视模式)
- 使用箭头键select行
- Shift + i(带你进入插入模式)
- 点击 space 键或任何您想在 selected 行前键入的内容。
- 保存更改(使用 :w),现在您将在所有 selected 行中看到更改。
这是另一个来源:How to insert a block of white spaces starting at the cursor position in vi?
希望有用!
要事第一。生成文件后无法解决此问题。假设您已将列合并为: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
然后您可以使用 csv
库,pandas.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
我有一个 table 文件,如下所示:
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
如您所见,某些值超出了预期的 space 它应该去掉列之间的 space ,导致我的代码无法读取文件,在那里说明比其他列少。
一个优点是我可以知道发生这种情况的文件的确切列(可能发生在几个列中),因此我可以实现一个代码或函数,将 space 插入这些列的每一行文件。
我对 writing/reading 文件不是很熟悉,所以我猜上面的想法是解决这个问题的最简单方法。干杯。
在我看来,如果您不确切地知道所有“错误”在哪里,您将不得不阅读整个文件。
就此而言,我想说您的方法(在第 n 列的每一行中添加 space)实际上非常有效。
我还建议研究 Vim 的块视觉模式。 例如(修改自jubi):
- 转到您需要的栏目
- Ctrl + v(进入可视模式)
- 使用箭头键select行
- Shift + i(带你进入插入模式)
- 点击 space 键或任何您想在 selected 行前键入的内容。
- 保存更改(使用 :w),现在您将在所有 selected 行中看到更改。
这是另一个来源:How to insert a block of white spaces starting at the cursor position in vi?
希望有用!
要事第一。生成文件后无法解决此问题。假设您已将列合并为: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
然后您可以使用 csv
库,pandas.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