在python中,将多个具有不同列数(按tab分隔)的文本文件合并为一个合并的文本文件



如何将多个txt文件合并为一个合并文件,其中每个文件包含不同数量的列(具有Float值​​通常(,并且我需要获得一个包含所有列的合并文件,如下所示:

编辑:有一条规则:如果有一个非数值(例如"Nan"..(,我需要根据它之前的最后一个数值进行填充。

file1.text

1.04
2.26
3.87

file2.txt

5.44    4.65    9.86
8.67    Nan     7.45
8.41    6.54    6.21

file3.txt

6.98    6.52
4.45    8.74
0.58    4.12

merged.txt

1.04    5.44    4.65    9.86    6.98    6.52
2.26    8.67    8.67    7.45    4.45    8.74
3.87    8.41    6.54    6.21    0.58    4.12

我在这里看到了对每个文件中一列的情况的回答。

如何对多个列执行此操作?

最简单的方法可能是使用numpy:

import numpy as np
filenames = ["file1.txt", "file2.txt", "file3.txt"]
fmt = '%.2f'    # assuming format is known in advance
all_columns = []
for filename in filenames:
all_columns.append(np.genfromtxt(filename))
arr_out = np.column_stack(tuple(all_columns))  # Stack columns
# Fill NaN-elements with last numeric value
arr_1d = np.ravel(arr_out)  # "flat reference" to arr_out
replaced_all_nan = False
nan_indices = np.where(np.isnan(arr_1d))
while len(nan_indices[0]):
new_indices = tuple([i-1 for i in nan_indices])
arr_1d[nan_indices] = arr_1d[new_indices]
nan_indices = np.where(np.isnan(arr_1d))
np.savetxt("merged.txt", arr_out, fmt=fmt)

可能出现的一个问题(如果是您的问题(是,第一个元素,即左上角的元素,是非数字的。在这种情况下,将使用最后一个(右下角(值或在此之前的最后一个数值。

最新更新