繁体   English   中英

如何合并一个txt文件中的每4行?

[英]How to combine every 4 lines in a txt file?

我有一个 txt.file 看起来像这样:

data1  data2  data3  
data4  data5  data6  
data7  data8  data9  
data10 data11 data12 
data13 data14 data15 
data16 data17 data18 
data19 data20 data21
data22 data23 data24 
.
.
.

我想重新排列我的 txt 文件,以便从 data1 到 data12 将是 1 行,而 data13 到 data24 将是第二行,依此类推。 它基本上是将每 4 行合并为 1 行。 所需的 output 应如下所示:

我想要这样的东西:

data1  data2  data3  data4  data5  data6  data7  data8  data9  data10 data11 data12 
data13 data14 data15 data16 data17 data18 data19 data20 data21 data22 data23 data24

我如何在 Python 中执行此操作?

谢谢你的任何建议,巴里斯

我尝试了各种帖子下分享的方法,但没有一个真正起作用。

你可以尝试这样的事情:

with open("text.txt" "r") as f:  # load data
    lines = f.readlines()

newlines = []
for i in range(0, len(lines), 4):  # step through in blocks of four
    newline = lines[i].strip() + " " + lines[i+1].strip() + " " + lines[i+2].strip() + " " + lines[i+3].strip() + " " # add the lines together after stripping the newline characters at the end
    newlines.append(newline + "\n")  # save them to a list

如果数字不能被 4 整除,则您需要为任何尾随行添加一些额外的处理。

如果你有多个项目组成一个矩形数组,你可以使用 numpy 整形:

N = 4
df = pd.read_csv('your_file', sep='\s+', header=None)
df2 = pd.DataFrame(df.to_numpy().reshape(-1, N*df.shape[1]))

否则,需要进行 pandas 整形:

N = 4
df = (pd.read_csv('your_file', sep='\s+', header=None)
   .stack(dropna=False).to_frame()
   .assign(idx=lambda d: d.index.get_level_values(0)//N,
           col=lambda d: d.groupby('idx').cumcount(),
          )
   .pivot(index='idx', columns='col', values=0)
   
)

Output:

       0       1       2       3       4       5       6       7       8       9       10      11
0   data1   data2   data3   data4   data5   data6   data7   data8   data9  data10  data11  data12
1  data13  data14  data15  data16  data17  data18  data19  data20  data21  data22  data23  data24

您可以使用numpy 这只是对您的数据进行一次reshape操作

import numpy as np

# data.txt:
# data1  data2  data3  
# data4  data5  data6  
# data7  data8  data9  
# data10 data11 data12 
# data13 data14 data15 
# data16 data17 data18 
# data19 data20 data21
# data22 data23 data24

data = np.loadtxt('data.txt', dtype='str')
data_reshaped = data.reshape((2, 12))
print(data_reshaped)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM