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

Python读取文本文件并提取每行psnr_y对应值的实现方法

Python 文本键值对读取与psnr_y值提取实现

核心基础函数说明

Python实现这类文本读取时,常用的内置/第三方函数与Matlab的能力对应关系如下:

  • open():内置文件操作入口,对应Matlab的fopen(),可指定文件路径、只读文本模式参数,返回可遍历的文件对象。
  • 文件对象逐行遍历:自动按行读取内容,对应Matlab的fgetl()逐行读取逻辑,不需要手动操作文件指针回退。
  • float() + math.inf:可解析普通浮点数、文本中的inf特殊值,和Matlab的浮点解析能力对齐。
  • numpy.array():将提取的数值转换为矩阵格式,匹配Matlab的数组存储习惯。

代码实现

满足核心需求:仅提取psnr_y值存入矩阵

import numpy as np
import math

psnr_y_list = []

# with上下文自动管理文件开关,不需要手动调用fclose
with open('data.txt', 'rt') as f:
    for line in f:
        # 去除行首尾空白后,按空格拆分所有键值对片段
        kv_segments = line.strip().split()
        for seg in kv_segments:
            # 每个片段按冒号拆分键、值字符串
            key, val_str = seg.split(':')
            if key == 'psnr_y':
                # 兼容inf格式的特殊值解析
                if val_str == 'inf':
                    val = math.inf
                else:
                    val = float(val_str)
                psnr_y_list.append(val)
                break

# 转换为列向量格式的矩阵,和Matlab存储习惯一致
psnr_y_matrix = np.array(psnr_y_list).reshape(-1, 1)

完全对齐原Matlab逻辑的全量解析版本

对应原Matlab将所有键值对结构化存储的逻辑:

import numpy as np
import math

# 存储结构化的解析结果,对应Matlab的struct结构
parsed_result = {}

with open('data.txt', 'rt') as f:
    # 读取第一行,获取所有键名,对应Matlab统计分隔符数、匹配解析格式的逻辑
    first_line = f.readline().strip()
    first_segments = first_line.split()
    key_list = [seg.split(':')[0] for seg in first_segments]
    # 为每个键初始化数值存储列表
    for k in key_list:
        parsed_result[k] = []
    # 解析第一行的数值
    for seg in first_segments:
        k, v_str = seg.split(':')
        v = math.inf if v_str == 'inf' else float(v_str)
        parsed_result[k].append(v)
    # 解析剩余行的所有内容
    for line in f:
        segments = line.strip().split()
        for seg in segments:
            k, v_str = seg.split(':')
            v = math.inf if v_str == 'inf' else float(v_str)
            parsed_result[k].append(v)

# 直接提取psnr_y对应的矩阵
psnr_y_matrix = np.array(parsed_result['psnr_y']).reshape(-1, 1)

原Matlab代码的逻辑映射对照

  • 原Matlab中fopen打开文件、fclose关闭文件的流程,Python用with上下文管理器自动完成文件生命周期管理,避免遗漏关闭操作。
  • 原Matlab中统计冒号数量、动态生成解析格式、文本扫描的流程,Python通过按空格拆分行、按冒号拆分键值的方式实现,不需要提前计算分隔符数量,代码更简洁。
  • 原Matlab中cell2struct将键名和对应值绑定的逻辑,Python用字典结构存储所有键对应的数值列表,后续可直接通过键名取值,访问逻辑和Matlab结构体完全一致。

内容的提问来源于stack exchange,提问作者david

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 19:54:01