Python文件读写在“简易记事本”项目中的应用

Python文件读写在“简易记事本”项目中的应用

文件读写是“简易记事本”项目实现数据持久化的关键部分。在本节中,我们将逐步拆解记事本的功能,详细讲解与文件读写相关的代码,并结合实际操作帮助读者更好地理解文件操作的核心知识点。

功能一:加载已有的笔记

当程序启动时,需要从文件中加载已有的笔记内容,以便用户可以继续管理先前保存的笔记。

相关代码

# 定义保存笔记的文件路径
FILE_PATH = "notes.txt"# 读取文件内容并返回为列表
def load_notes():"""从文件中加载笔记内容。如果文件不存在,返回空列表。"""try:# 以只读模式打开文件with open(FILE_PATH, "r", encoding="utf-8") as file:notes = file.readlines()  # 按行读取内容,返回列表return [note.strip() for note in notes]  # 去除换行符后返回except FileNotFoundError:# 文件不存在时返回空列表print("文件不存在,未加载任何笔记。")return []

功能解析

  1. 文件路径设置

    • FILE_PATH 是保存笔记的文件路径,方便统一管理。如果文件存储在其他位置,可以修改为绝对路径。
  2. 打开文件

    • 使用 open(FILE_PATH, "r", encoding="utf-8") 以只读模式打开文件。utf-8 编码确保中文字符正常显示。
  3. 读取文件内容

    • 使用 file.readlines() 方法按行读取文件中的所有内容,返回一个列表,每行对应列表中的一个元素。
  4. 去除换行符

    • 使用列表推导式 [note.strip() for note in notes] 去除每行末尾的换行符,确保数据整洁。
  5. 文件不存在的处理

    • 捕获 FileNotFoundError 异常,提示用户文件不存在,并返回空列表。

实操演示

  • 假设文件 notes.txt 包含以下内容:
    买牛奶
    早起锻炼
    阅读一本书
    
  • 调用 load_notes() 函数将返回:
    ["买牛奶", "早起锻炼", "阅读一本书"]
    
功能二:保存新笔记到文件

用户新增的笔记需要保存到文件中,以确保程序关闭后数据不会丢失。

相关代码

# 将新的笔记写入文件
def save_note(note):"""将新笔记保存到文件。如果文件不存在,将自动创建。"""with open(FILE_PATH, "a", encoding="utf-8") as file:file.write(note + "\n")  # 追加新笔记并换行print(f"笔记已保存:{note}")

功能解析

  1. 追加模式写入

    • 使用 open(FILE_PATH, "a", encoding="utf-8") 以追加模式打开文件。如果文件不存在,Python会自动创建文件。
  2. 写入新笔记

    • 使用 file.write(note + "\n") 将笔记内容写入文件,并在末尾添加换行符,确保每条笔记占据一行。
  3. 用户反馈

    • 每次写入后打印一条消息,提示用户笔记已成功保存。

实操演示

  • 新增笔记 完成代码编写,调用 save_note("完成代码编写") 后,文件 notes.txt 的内容更新为:
    买牛奶
    早起锻炼
    阅读一本书
    完成代码编写
    
功能三:显示已有笔记

用户需要查看文件中保存的所有笔记内容,系统需要从文件加载并格式化展示。

相关代码

# 显示所有笔记
def display_notes(notes):"""显示所有已保存的笔记。"""if not notes:print("当前没有任何笔记。")else:print("已保存的笔记如下:")for index, note in enumerate(notes, start=1):print(f"{index}. {note}")

功能解析

  1. 检查笔记列表是否为空

    • 使用 if not notes 判断笔记列表是否为空,若为空则提示用户没有任何笔记。
  2. 逐条显示笔记

    • 使用 enumerate 为每条笔记添加序号,并打印出整齐的格式化内容。

实操演示

  • 假设笔记列表为 ["买牛奶", "早起锻炼", "阅读一本书"],调用 display_notes 函数后输出:
    已保存的笔记如下:
    1. 买牛奶
    2. 早起锻炼
    3. 阅读一本书
    

总结

通过上述逐步拆解和详细讲解,读者可以清晰地理解文件读写操作在“简易记事本”项目中的应用。文件操作是实现数据持久化的核心,同时也是Python编程中非常重要的技能。通过实操练习,能够帮助读者更好地掌握这一知识点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/64173.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Agent】AutoGen Studio2.0开源框架-UI层环境安装+详细操作教程(从0到1带跑通智能体AutoGen Studio)

💥 欢迎来到我的博客!很高兴能在这里与您相遇! 首页:GPT-千鑫 – 热爱AI、热爱Python的天选打工人,活到老学到老!!!导航 - 人工智能系列:包含 OpenAI API Key教程, 50个…

三层交换机配置

一,三层交换 概念:三层交换技术就是:二层交换技术三层转发技术(路由器功能)。它解决了局域网中网段划分之后,网段中子网必须依赖路由器进行管理的局面,解决了传统路由器低速,复杂所造成的网络瓶颈问题。 …

js单例模式

单例模式是一种常见的设计模式,在JavaScript中也有广泛应用,以下是关于它的详细介绍: 定义 单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问该实例。在JavaScript中,…

【Golang 面试题】每日 3 题(六)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/UWz06 📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏…

SQL Server数据库多主模式解决方案

SQL Server 本身并不直接支持多主模式(Multi-Master Replication),即多个数据库实例可以同时进行写操作,并且这些更改会自动同步到其他实例。不过,SQL Server 提供了多种高可用性和复制解决方案,可以实现类似多主模式的功能。以下是几种常见的方法: 1. Always On 可用性…

连锁餐饮行业数据可视化分析方案

引言 随着连锁餐饮行业的迅速发展,市场竞争日益激烈。企业需要更加精准地把握运营状况、消费者需求和市场趋势,以制定科学合理的决策,提升竞争力和盈利能力。可视化数据分析可以帮助连锁餐饮企业整合多源数据,通过直观、动态的可…

Zookeeper JavaAPI操作(Curator API常用操作)

构建项目 zk版本:3.5.7,引入4.0.0的curator版本,Curator依赖的版本只能比zookeeper依赖的版本高。 Curator简单介绍 Curator是Netflix公司开源的一套zookeeper客户端框架,解决了很多Zookeeper客户端非常底层的细节开发工作&…

可搜索的下拉选择框:filterable属性详解

在前端开发中,下拉选择框(Dropdown Select)是一个常见的UI组件,它允许用户从一组预定义的选项中选择一个或多个值。然而,当选项数量较多时,手动查找特定的选项可能会变得繁琐。为了解决这个问题&#xff0c…

精选9个自动化任务的Python脚本精选

大家好,我是老邓,今天我们来一起学习如何用Python进行一些常见的自动化操作,涉及文件处理、网络交互等实用技巧。即使你没有任何Python基础也没关系,我会用最通俗易懂的语言来讲解。 1. 对目录中的文件进行排序 import osdef so…

滑动窗口 + 算法复习

维护一个满足条件的窗口大小&#xff0c;然后进行双指针移动 1.最长子串 题目链接&#xff1a;1.最长子串 - 蓝桥云课 #include<bits/stdc.h> #define int long long using namespace std; string s; int k; signed main() {int max_len0,left0;cin>>s>>k;…

PDF书籍《手写调用链监控APM系统-Java版》第9章 插件与链路的结合:Mysql插件实现

本人阅读了 Skywalking 的大部分核心代码&#xff0c;也了解了相关的文献&#xff0c;对此深有感悟&#xff0c;特此借助巨人的思想自己手动用JAVA语言实现了一个 “调用链监控APM” 系统。本书采用边讲解实现原理边编写代码的方式&#xff0c;看本书时一定要跟着敲代码。 作者…

关于Vue的子组件改变父组件传来的值

一、组件直接传值 大家都知道父子组件传值的方案&#xff0c;有以下几个&#xff0c;不再详细敖述 Props&#xff1a;父组件向子组件传递数据 $emit&#xff1a;子组件通过自定义事件向父组件传递数据 .sync修饰符&#xff1a;一个方便且强大的工具&#xff0c;可以简化父子组…

Flink的Watermark水位线详解

一、Flink的时间语义 Flink有如下三种时间语义&#xff1a; Flink的三种时间语义-CSDN博客 在实际应用中&#xff0c;一般会采用事件时间语义。而正如前面所说的&#xff0c;事件时间语义需要等窗口的数据全部到齐了&#xff0c;才能进行窗口计算。那么&#xff0c;什么时候数…

ES学习Promise对象(九)

这里写目录标题 一、概念二、示例基本使用使用 Promise 对象封装Ajaxthen() 方法catch() 方法 一、概念 简单说就是一个容器&#xff0c;里面保存着某个未来才会结束的事件&#xff08;通常是一个异步操作&#xff09;的结果。Promise 是一个对象&#xff0c;Promise 提供统一…

Kibana:LINUX_X86_64 和 DEB_X86_64两种可选下载方式的区别

最近需要在vm&#xff08;操作系统是 Ubuntu 22.04.4 LTS&#xff0c;代号 Jammy。这是一个基于 x86_64 架构的 Linux 发行版&#xff09;上安装一个7.17.8版本的Kibana&#xff0c;并且不采用docker方式。 在下载的时候发现有以下两个选项&#xff0c;分别是 LINUX_X86_64 和 …

CMake 构建项目并整理头文件和库文件

本文将介绍如何使用 CMake 构建项目、编译生成库文件&#xff0c;并将头文件和库文件整理到统一的目录中以便在其他项目中使用。 1. 项目结构 假设我们正在构建一个名为 rttr 的开源库&#xff0c;初始的项目结构如下&#xff1a; D:\WorkCode\Demo\rttr-master\|- src\ …

【FAQ】HarmonyOS SDK 闭源开放能力 — Vision Kit(2)

1.问题描述&#xff1a; 人脸活体检测返回上一页App由沉浸式变为非沉浸式多了上下安全区域。 解决方案&#xff1a; 检测结束后需要自己去设置沉浸式配置。 2.问题描述&#xff1a; Vision Kit文字识别是本地识别&#xff0c;还是上传至服务器&#xff0c;由服务器来识别文…

AIA - IMSIC之二(附IMSIC处理流程图)

本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。 1 ​​​​​​​通过IMSIC接收外部中断的CSR 软件通过《AIA - 新增的CSR》描述的CSR来访问IMSIC。 machine level 的 CSR 与 IMSIC 的 machine level interrupt file 可相互互动;而 supervisor level 的 CSR…

Vue单页应用的配置

前面通过几篇文章了解并掌握了 Vue 项目构建及运行的前期工作 。接下来我们可以走进 Vue 项目的内部&#xff0c;一探其内部配置的基本构成。 1. 路由配置 由于 Vue 这类型的框架都是以一个或多个单页构成&#xff0c;在单页内部跳转并不会重新渲染 HTML 文件&#xff0c;其路…

CocosCreator-引擎案例-TS:spine

工程1&#xff1a;LoadSpine&#xff1a;简单加载spine资源 建立工程&#xff0c;在层级上建立一个空对象&#xff0c;改名spine 在spine上添加spine组件&#xff1a; 添加组件>渲染组件>spine 在spine上挂上脚本loadspine onLoad () {cc.resources.load(loadSpine/ali…