如何在Python中导入带空行的多列浮点型TXT文件并分组
解决带空行分隔数据块的TXT文件按列分组问题
问题背景
你有一个包含3列浮点数值的TXT文件,文件内用空行分隔不同的数据块,需要导入Python后按列和数据块分组整理。此前使用np.loadtxt()或pandas.read_csv()时,这些工具会自动忽略空行,无法实现按块分组的需求。
示例输入TXT:
1.0 1.1 1.2 1.3 1.4 1.5 2.0 2.1 2.2 2.3 2.4 2.5
期望输出结构:
column 1-1: 1.0, 1.3 column 2-1: 1.1, 1.4 column 3-1: 1.2, 1.5 column 1-2: 2.0, 2.3 column 2-2: 2.1, 2.4 column 3-2: 2.2, 2.5
解决方案
核心思路是手动读取文件并保留空行信息,先分割出各个数据块,再对每个块单独按列提取数据。
完整代码实现
import numpy as np # 1. 读取文件所有行,保留空行标记 with open('file.txt', 'r') as f: # 去除每行首尾空白,空行处理后会变成空字符串 lines = [line.strip() for line in f] # 2. 将行分割为独立的数据块 data_blocks = [] current_block = [] for line in lines: if line: current_block.append(line) else: # 遇到空行时,若当前块有内容则存入列表,清空当前块 if current_block: data_blocks.append(current_block) current_block = [] # 处理文件末尾未以空行结束的最后一个块 if current_block: data_blocks.append(current_block) # 3. 处理每个数据块,提取列数据并格式化 output_parts = [] for block_num, block in enumerate(data_blocks, start=1): # 将块内每行转为浮点数组,再转置得到列数据 block_array = np.array([list(map(float, line.split())) for line in block]) columns = block_array.T # 按要求格式生成当前块的列信息 block_lines = [] for col_num, col_data in enumerate(columns, start=1): col_str = f"column {col_num}-{block_num}: {', '.join(map(str, col_data))}" block_lines.append(col_str) output_parts.append('\n'.join(block_lines)) # 4. 输出最终结果 print('\n\n'.join(output_parts))
代码说明
- 手动读取行:直接读取文件所有行并处理空白,保留空行的空字符串标记,这是区分数据块的关键。
- 分割数据块:遍历行列表,将连续非空行归为一个数据块,遇到空行则完成当前块的分割。
- 列数据提取:对每个数据块,先将每行转为浮点数组,再通过转置(
.T)得到按列排列的数据,最后格式化输出。
内容的提问来源于stack exchange,提问作者DOMINIC HERNANDEZ
相关产品推荐
相关产品推荐

