0

0

Python教程:高效计算文本文件指定列末尾N个值的总和与均值

碧海醫心

碧海醫心

发布时间:2025-10-21 10:28:16

|

237人浏览过

|

来源于php中文网

原创

Python教程:高效计算文本文件指定列末尾N个值的总和与均值

本教程详细介绍了如何使用python从结构化文本文件中高效提取指定列的末尾n个数值,并计算它们的总和与平均值。通过读取文件所有行、利用列表切片获取末尾数据,并结合列表推导式进行数据解析和汇总,本方法提供了一种简洁而有效的解决方案,适用于处理日志或时间序列数据。

在数据分析和处理的日常工作中,我们经常需要从文本文件中提取特定信息。一个常见的场景是,我们需要关注文件中最新记录的数据,例如计算某个指标的最后N个值的总和或平均值。本文将以一个包含日期和数值的文本文件为例,详细讲解如何利用Python实现这一目标。

文本文件结构示例

假设我们有一个名为 lista.txt 的文本文件,其内容如下:

08/12/2023 81.3
09/12/2023 80.8
10/12/2023 80.9
11/12/2023 81.0
12/12/2023 81.1
13/12/2023 81.5
14/12/2023 80.1
15/12/2023 81.0
16/12/2023 80.9
17/12/2023 80.6

文件中每行包含两个由空格分隔的列:日期和数值。我们的目标是计算第二列(数值)的最后7个值的总和与平均值。

核心实现思路

要正确地计算文件末尾N个值的总和,我们需要采取以下步骤:

百宝箱
百宝箱

百宝箱是支付宝推出的一站式AI原生应用开发平台,无需任何代码基础,只需三步即可完成AI应用的创建与发布。

下载

立即学习Python免费学习笔记(深入)”;

  1. 读取所有行: 首先,将文件的所有行读取到一个列表中。
  2. 获取末尾N行: 利用Python列表的切片功能,轻松获取列表的最后N个元素(即文件的最后N行)。
  3. 解析并计算: 遍历这N行,对每一行进行解析,提取出我们需要的数值,并将其转换为浮点数类型,然后进行累加。

Python 代码实现

以下是实现上述功能的Python代码:

import os

# 定义文件路径
file_path = '/storage/emulated/0/Python/lista.txt'

# --- 辅助代码:如果文件不存在,则创建一个示例文件以供演示 ---
if not os.path.exists(file_path):
    print(f"文件 '{file_path}' 不存在,正在创建示例文件...")
    sample_data = """08/12/2023 81.3
09/12/2023 80.8
10/12/2023 80.9
11/12/2023 81.0
12/12/2022 81.1
13/12/2022 81.5
14/12/2022 80.1
15/12/2022 81.0
16/12/2022 80.9
17/12/2022 80.6"""
    try:
        with open(file_path, 'w') as f:
            f.write(sample_data)
        print(f"示例文件 '{file_path}' 已创建成功。")
    except IOError as e:
        print(f"创建示例文件失败: {e}")
        exit() # 如果无法创建文件,则退出程序
# --- 辅助代码结束 ---

# 定义需要处理的末尾行数
N = 7

try:
    with open(file_path, 'r') as f:
        # 读取文件所有行到一个列表中
        lines = f.readlines()

    # 使用列表切片获取最后N行
    # 如果文件总行数小于N,last_lines将包含所有行
    last_lines = lines[-N:]

    # 检查获取到的行数,确保有足够的行进行计算
    if len(last_lines) == 0:
        print(f"文件 '{file_path}' 中没有足够的行来计算最后 {N} 个值。")
        mysum = 0.0
        average = 0.0
    else:
        # 使用列表推导式和sum函数计算第二列值的总和
        # line.split()[1] 获取每行的第二个元素(数值部分)
        # float() 将字符串转换为浮点数
        mysum = sum(float(line.split()[1]) for line in last_lines)

        # 计算平均值
        # 确保实际用于计算的行数不为0,避免除零错误
        actual_N = len(last_lines)
        average = mysum / actual_N if actual_N > 0 else 0.0

    print("\n计算结果:")
    print(f"文件 '{file_path}' 中最后 {N} 个值的总和为: {mysum}")
    print(f"文件 '{file_path}' 中最后 {N} 个值的平均值为: {average}")

except FileNotFoundError:
    print(f"错误:文件 '{file_path}' 未找到。")
except IndexError:
    print("错误:文件行格式不正确或行数不足。请检查文件内容。")
except ValueError:
    print("错误:文件中的数值无法转换为浮点数。请检查数据格式。")
except Exception as e:
    print(f"发生未知错误: {e}")

代码解析

  1. file_path = '/storage/emulated/0/Python/lista.txt': 定义了待处理文件的完整路径。
  2. N = 7: 定义了我们感兴趣的末尾行数。你可以根据需要修改这个值。
  3. with open(file_path, 'r') as f:: 这是Python中处理文件的推荐方式。它确保文件在使用完毕后会被正确关闭,即使发生错误。'r' 表示以只读模式打开文件。
  4. lines = f.readlines(): 读取文件的所有行,并将每一行作为一个字符串元素存储在一个列表中。例如,lines 会是 ['08/12/2023 81.3\n', '09/12/2023 80.8\n', ...]。注意每行末尾通常包含换行符 \n。
  5. last_lines = lines[-N:]: 这一步是关键。Python的列表切片功能允许我们方便地获取列表的子集。[-N:] 表示从列表的倒数第N个元素开始,直到列表末尾。如果列表的元素数量少于N,它会返回所有元素。
  6. mysum = sum(float(line.split()[1]) for line in last_lines):
    • 这是一个列表推导式(或生成器表达式)与 sum() 函数的结合。
    • for line in last_lines: 遍历 last_lines 列表中的每一行。
    • line.split(): 对每一行字符串进行空格分割,返回一个字符串列表。例如,'08/12/2023 81.3\n'.split() 会得到 ['08/12/2023', '81.3']。
    • [1]: 访问分割后列表的第二个元素(索引为1),即我们需要的数值字符串 '81.3'。
    • float(...): 将这个数值字符串转换为浮点数类型。
    • sum(...): 对所有转换后的浮点数进行求和。
  7. average = mysum / actual_N if actual_N > 0 else 0.0: 计算总和的平均值。这里使用了条件表达式,以避免当 actual_N(实际获取到的行数)为0时可能发生的除零错误。

注意事项与最佳实践

  • 文件路径: 确保 file_path 指向正确的文件位置。在不同操作系统中,文件路径的表示方式可能略有不同(例如Windows使用反斜杠 \,但Python通常推荐使用正斜杠 / 或原始字符串 r'...')。
  • 错误处理: 示例代码中加入了 try-except 块,用于捕获 FileNotFoundError(文件不存在)、IndexError(行格式不正确或行数不足导致 split() 或 [1] 失败)和 ValueError(数值转换失败)等常见错误,提高了程序的健壮性。同时,也考虑了文件行数不足 N 的情况。
  • 数据格式: 确保文件中需要计算的列确实是数值类型,否则 float() 转换会失败。
  • 内存效率: 对于非常大的文件(例如,GB级别),f.readlines() 会一次性将所有内容加载到内存中,这可能会导致内存不足。对于这种情况,可以考虑使用 collections.deque 或其他迭代方式来优化内存使用,但这超出了本教程的范围。对于大多数中小型文件,readlines() 是一个简洁高效的选择。
  • N值: 如果 N 大于文件的总行数,lines[-N:] 会自动返回所有行。在计算平均值时,我们使用 len(last_lines) 来作为除数,确保即使实际获取的行数少于 N 也能正确计算。

总结

通过本文的讲解,您应该已经掌握了如何使用Python从文本文件中提取指定列的末尾N个数值,并计算它们的总和与平均值。核心在于利用 readlines() 读取所有行,并通过列表切片 [-N:] 高效获取末尾数据,最后结合列表推导式进行数据解析和汇总。这种方法简洁、高效,并具有良好的可读性,是处理类似数据分析任务的有力工具。在实际应用中,别忘了加入适当的错误处理机制,以应对各种可能的文件和数据异常情况。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

595

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

106

2025.10.23

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

846

2023.08.22

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

760

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1566

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

649

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

1228

2024.03.22

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 4.9万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号