Python如何读取txt指定行数据并按列绘制折线图

Mason
Mason
发布时间:2026-10-11| 3人浏览过
原创

本文详解如何使用Python读取txt文件指定范围内的数据,并提取每行固定位置的数值。通过逐行分割与numpy批量加载两种方法,结合matplotlib库将提取的x/y轴数据转为折线图,全程提供可直接运行的代码示例与常见报错排查指南,适合日志分析与基础数据处理需求。

处理目标与核心逻辑

在日志解析或实验记录场景中,通常需要跳过文件头部元数据,仅关注指定行区间内的关键指标。例如从约两百行的日志中提取第17至216行,并截取每行固定索引位置的损失值与精度值,随后将其转化为二维坐标进行可视化分析。以下提供基于标准库的精准抓取方案,以及结合第三方库的高效批量处理方案。

第1步:使用Linecache精准提取指定行数据

目的:按需读取大文件的中间段落,避免全量载入内存引发阻塞或卡顿。

操作入口:引入linecache模块,定义辅助函数锁定目标行号。

#-*- coding: utf-8 -*-
"""
@FileName: read_log.py
@IDE: PyCharm
@Description: 获取日志中的训练精度和损失
"""
import linecache


# 封装取行函数,自动清理末尾换行符
# file: 目标txt绝对路径或相对路径
# nums_line: 目标行号(整数)
def get_line(file, nums_line):
    return linecache.getline(file, nums_line).strip()


file = "D:/UseTools/OneDrive/codes/My-Research/logs/05-01_10-09-40/05-01_10-09-40.txt"
train_accuracy_list = []
train_loss_list = []

# 遍历目标行区间 [17, 216]
for idx in range(17, 217):
    # 获取当前行文本并按空白字符切分为列表
    current_context = get_line(file, idx).split()
    # 根据日志排版规范提取指定索引位置
    # 假设索引6为损失值(loss),索引9为准确率(accuracy)
    train_loss = float(current_context[6])
    train_accuracy = float(current_context[9])
    
    train_loss_list.append(train_loss)
    train_accuracy_list.append(train_accuracy)

完成状态:两个列表分别填充了对应区间的浮点型指标,可在后续脚本中直接传入绘图函数。

第2步:逐行切分并映射坐标轴绘制折线图

目的:将规整的双列数值文本转换为独立坐标序列,调用Matplotlib渲染基础图形。

操作入口:使用Python内置open迭代器读取每一行,通过列表推导式拆分字段。

import matplotlib.pyplot as plt

X, Y = [], []
# 以只读模式打开txt,逐行迭代
for line in open("my_data.txt", "r"):
    # 按空白符切分后转浮点数
    values = [float(s) for s in line.split()]
    X.append(values[0])  # 第一列作为X轴
    Y.append(values[1])  # 第二列作为Y轴

# 执行绘图并展示窗口
plt.plot(X, Y)
plt.xlabel("X Axis")
plt.ylabel("Y Axis")
plt.show()

完成状态:弹出标准Windows/Linux/GUI窗口呈现连续折线,横纵坐标长度与文件非空行数一致。

第3步:借助NumPy实现批量加载与绘图

目的:针对纯数值型文本(含.dat等扩展名),省略Python层循环,利用C底层优化提升解析速度。

操作入口:使用numpy.loadtxt一次性构建二维数组,通过切片语法定位列。

import matplotlib.pyplot as plt
import numpy as np

# 直接读取文本为二维浮点矩阵
data = np.loadtxt("test1.txt")

# data[:, 0] 选取所有行的第1列
# data[:, 1] 选取所有行的第2列
plt.plot(data[:, 0], data[:, 1])
plt.title("Plot via NumPy")
plt.show()

完成状态:生成的图像轮廓与手动迭代法完全一致,且代码体积精简,便于集成至数据处理流水线。

关键验证与排错指引

  • 索引越界异常(IndexError):若某行数据列数不足,current_context[n]会抛出错误。建议在切片前增加判空或长度检查:if len(parts) > 9:。
  • 分隔符不匹配:默认.split()处理任意空白符(空格/Tab)。若日志使用逗号或竖线分隔,需明确传入参数如.split(",")或.split("|")。
  • 路径格式规范:Windows系统推荐使用正斜杠/或双反斜杠\,Linux/macOS使用单斜杠。避免混用导致FileNotFoundError。
  • 乱码排查:若中文路径或注释导致解析中断,确保文件保存格式为UTF-8,并在open()中显式指定encoding="utf-8"。

总结

本文梳理了从特定行区间抽取定位数据到坐标可视化的完整链路。基础迭代方案透明可控,适合理解数据结构;NumPy方案执行高效,适合工程化调度。掌握这两种范式即可覆盖绝大多数文本型实验日志与表格数据的预处理工作。以上就是Python读取txt指定行数据并按列绘制折线图的详细内容,更多关于Python文件处理与数据可视化的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。