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