0

0

Python实战:为文本文件新增行自动添加序列号

霞舞

霞舞

发布时间:2025-11-19 12:34:01

|

185人浏览过

|

来源于php中文网

原创

Python实战:为文本文件新增行自动添加序列号

本教程详细介绍了如何使用python为文本文件的新增行自动添加一个带零填充的顺序号。通过巧妙运用文件读写模式(a+)、文件指针定位和f-string格式化,我们能够高效地在文件末尾追加新数据,并确保每行都有唯一的、格式化的序列标识符,从而实现日志或数据记录的自动化编号。

在日常的编程任务中,我们经常需要向文本文件追加数据,例如日志记录、事件跟踪或简单的数据存储。一个常见的需求是为每条新记录自动生成一个递增的序列号,并且这个序列号通常需要固定长度并进行零填充(例如001, 002, ..., 010, ...)。本文将详细介绍如何使用Python实现这一功能,确保数据追加的正确性和序列号的连续性。

核心思路

要实现为新增行添加序列号,关键在于两点:

  1. 确定当前文件已有的行数:这是生成下一个序列号的基础。我们需要读取文件内容来计算现有行数。
  2. 在文件末尾追加新数据:在获取到序列号后,将格式化后的新数据写入文件。

这两个操作需要在一个文件会话中完成,以避免竞态条件或文件状态不一致的问题。

实现步骤与代码示例

我们将通过一个具体的Python脚本来演示如何实现这一功能。假设我们要记录比赛信息,包括日期、对手、赛事类型和主客场,并为每条记录添加一个三位数的序列号。

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

1. 导入必要的模块

首先,我们需要datetime模块来获取当前日期。

from datetime import datetime

2. 定义文件路径

将文件路径定义为一个常量,便于管理和修改。

FILENAME = "/storage/emulated/0/Python/stadio_2023_2024.txt"

3. 打开文件并确定序列号

这是实现的核心部分。我们使用with open()语句以a+模式打开文件。

  • a+模式:表示以追加和读写模式打开文件。如果文件不存在,则创建文件。如果文件存在,文件指针会定位到文件末尾(EOF)。
  • data.seek(0):由于a+模式打开时文件指针在末尾,我们需要将其移回文件开头(BOF),以便读取现有内容。
  • len(data.readlines()) + 1:读取文件的所有行并计算其数量,然后加1即得到下一个可用的序列号。readlines()会返回一个包含所有行的列表。
with open(FILENAME, "a+") as data:
    data.seek(0)  # 将文件指针移到文件开头
    seqno = len(data.readlines()) + 1  # 计算下一个序列号

    # ... 后续操作

4. 获取用户输入和当前日期

接下来,获取用户输入的比赛信息,并格式化当前日期。

‎ Gemini Storybook
‎ Gemini Storybook

Google Gemini推出的AI绘本生成工具

下载
    date_str = datetime.today().strftime("%d/%m/%Y") # 格式化当前日期
    avversaria = input("Avversaria: ")
    competizione = input("SA, CI, CU o Am: ")
    where = input("C, T o N: ")

注意:为了避免与变量名date冲突,这里将日期字符串变量命名为date_str。

5. 格式化输出并写入文件

使用f-string来构建最终的输出字符串,并利用格式化说明符{seqno:03d}来实现零填充的三位数序列号。

  • {seqno:03d}:seqno是待格式化的整数,:03d表示将其格式化为至少3位宽的十进制整数,不足3位时在前面用0填充。

最后,使用print(output, file=data)将格式化后的字符串写入文件。这种方式比data.write(output + '\n')更简洁,因为print默认会添加换行符。

    output = f"{seqno:03d} {date_str} {avversaria} {competizione} {where}"
    print(output, file=data) # 将数据写入文件

完整代码示例

将以上步骤整合,得到完整的Python脚本:

from datetime import datetime

# 定义文件路径
FILENAME = "/storage/emulated/0/Python/stadio_2023_2024.txt"

def add_match_record():
    """
    向文件中添加新的比赛记录,并自动生成序列号。
    """
    with open(FILENAME, "a+") as data:
        # 将文件指针移到文件开头,以便读取现有内容
        data.seek(0)

        # 读取所有行并计算行数,得到下一个序列号
        # 如果文件为空,readlines()返回空列表,len为0,seqno为1
        seqno = len(data.readlines()) + 1

        # 获取当前日期并格式化
        date_str = datetime.today().strftime("%d/%m/%Y")

        # 获取用户输入
        avversaria = input("Avversaria: ")
        competizione = input("SA, CI, CU o Am: ")
        where = input("C, T o N: ")

        # 格式化输出字符串,序列号使用零填充的三位数格式
        output = f"{seqno:03d} {date_str} {avversaria} {competizione} {where}"

        # 将格式化后的数据写入文件
        # print函数的file参数可以将输出重定向到文件对象,并自动添加换行符
        print(output, file=data)

        print(f"记录已成功添加: {output}")

def view_file_content():
    """
    读取并打印文件的所有内容。
    """
    try:
        with open(FILENAME, "r") as data:
            print("\n--- 文件内容 ---")
            print(data.read())
            print("-----------------")
    except FileNotFoundError:
        print(f"文件 '{FILENAME}' 不存在。")

if __name__ == "__main__":
    add_match_record()
    view_file_content()

运行效果

首次运行:

Avversaria: Juventus
Competizione: SA
C, T o N: T
记录已成功添加: 001 30/12/2023 Juventus SA T

--- 文件内容 ---
001 30/12/2023 Juventus SA T
-----------------

再次运行:

Avversaria: Cremonese
Competizione: CI
C, T o N: C
记录已成功添加: 002 03/01/2024 Cremonese CI C

--- 文件内容 ---
001 30/12/2023 Juventus SA T
002 03/01/2024 Cremonese CI C
-----------------

注意事项与最佳实践

  1. 使用 with open():始终使用 with open() 语句来处理文件操作。这能确保文件在操作完成后被正确关闭,即使发生错误也不例外,从而避免资源泄露。
  2. 文件模式选择
    • "a+" (追加读写模式):最适合本场景,因为它既允许读取现有内容(用于计算序列号),又允许在文件末尾追加新数据。如果文件不存在,它会自动创建。
    • "a" (追加模式):只能追加写入,不能读取。不适用于本场景。
    • "r" (只读模式):只能读取,不能写入。
    • "w" (写入模式):每次打开都会清空文件内容,不适用于追加场景。
  3. 文件指针操作:在a+模式下,文件打开时指针位于文件末尾。如果需要读取文件内容(如计算行数),必须先使用file_object.seek(0)将指针移回文件开头。
  4. 大规模文件处理:对于非常大的文件,data.readlines()会将整个文件内容加载到内存中,这可能导致内存不足。在这种情况下,可以考虑逐行读取文件以计算行数,例如使用循环:
    line_count = 0
    for line in data:
        line_count += 1
    seqno = line_count + 1

    然而,对于大多数日志或数据文件,readlines()通常是可接受的。

  5. 错误处理:在实际应用中,应考虑添加错误处理机制,例如使用try-except块捕获FileNotFoundError、PermissionError等文件操作可能产生的异常。
  6. 序列号持久性:本方法依赖于文件的实际行数来生成序列号。如果文件被外部修改(如手动删除行),序列号的连续性可能会被破坏。对于需要更严格序列号管理(如数据库主键)的场景,应考虑使用数据库或更复杂的持久化策略。

总结

通过本文的讲解,我们掌握了如何利用Python的文件操作功能,为文本文件新增行自动添加带零填充的序列号。关键在于理解a+文件模式、seek(0)文件指针定位以及f-string的强大格式化能力。这一技术在日志记录、数据收集等多种应用场景中都非常实用,能够有效提升数据管理的自动化和规范性。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

193

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

19

2026.02.03

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1071

2023.08.02

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

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

1570

2023.10.24

mysql标识符无效错误怎么解决
mysql标识符无效错误怎么解决

mysql标识符无效错误的解决办法:1、检查标识符是否被其他表或数据库使用;2、检查标识符是否包含特殊字符;3、使用引号包裹标识符;4、使用反引号包裹标识符;5、检查MySQL的配置文件等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

217

2023.12.04

Python标识符有哪些
Python标识符有哪些

Python标识符有变量标识符、函数标识符、类标识符、模块标识符、下划线开头的标识符、双下划线开头、双下划线结尾的标识符、整型标识符、浮点型标识符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

326

2024.02.23

java标识符合集
java标识符合集

本专题整合了java标识符相关内容,想了解更多详细内容,请阅读下面的文章。

293

2025.06.11

c++标识符介绍
c++标识符介绍

本专题整合了c++标识符相关内容,阅读专题下面的文章了解更多详细内容。

179

2025.08.07

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

69

2026.03.13

热门下载

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

精品课程

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

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 5万人学习

SciPy 教程
SciPy 教程

共10课时 | 2万人学习

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

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