You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 22:03:27