如何使用NumPy将不规则列文本文件转为指定形状数组
NumPy实现分组文本行横向拼接
实现逻辑
- 逐行读取输入文件,自动跳过空行,将每行逗号分隔的数值解析为数字列表
- 每3行划分为一个处理单元,将单元内3行的数值按顺序拼接为长度13的单行(前2行各5个值+第3行3个值,合计13列)
- 拼接完成后按逗号分隔的格式写入目标文本文件,同时增加列数校验逻辑,避免输入格式错误导致输出异常
完整代码
import numpy as np # 按需修改文件路径 INPUT_FILE = "input.txt" OUTPUT_FILE = "output.txt" # 读取并解析输入文件 all_data_rows = [] with open(INPUT_FILE, "r", encoding="utf-8") as f: for line in f: stripped_line = line.strip() if not stripped_line: continue # 解析每行逗号分隔的数值,若为浮点数可将int替换为float row_values = list(map(int, [item.strip() for item in stripped_line.split(",")])) all_data_rows.append(row_values) # 按3行一组做横向拼接 merged_result = [] GROUP_STEP = 3 for idx in range(0, len(all_data_rows), GROUP_STEP): current_group = all_data_rows[idx:idx+GROUP_STEP] single_merged_row = [] for row in current_group: single_merged_row.extend(row) merged_result.append(single_merged_row) # 转NumPy数组做格式校验 output_array = np.array(merged_result) # 校验拼接后列数是否符合13列的预期 if output_array.shape[1] != 13: raise ValueError(f"输入格式异常,拼接后列数为{output_array.shape[1]},预期为13列,请检查输入文件") # 写入输出文件 with open(OUTPUT_FILE, "w", encoding="utf-8") as f: for row in output_array: f.write(", ".join(map(str, row)) + "\n")
效果验证
传入示例输入运行代码,生成的输出文件和目标格式完全一致:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26
内容的提问来源于stack exchange,提问作者brisk bamboo
相关产品推荐
相关产品推荐

