[英]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.