当前位置: 首页 > news >正文

【Python】从基础到进阶(八):文件操作与上下文管理

在这里插入图片描述

🔥 个人主页:空白诗

在这里插入图片描述

文章目录

    • 一、引言
    • 二、Python文件操作基础
      • 1. 打开文件
      • 2. 读取文件
      • 3. 写入文件
      • 4. 文件指针定位
    • 三、上下文管理
      • 1. 使用`with`管理文件
      • 2. 自定义上下文管理器
    • 四、文件操作的最佳实践
    • 五、案例:日志文件管理
      • 1. 需求分析
      • 2. 实现`Logger`类
    • 六、结论

在这里插入图片描述


一、引言

在编程过程中,数据的存储与读取是必不可少的任务。文件操作是Python编程中的一个重要部分,通过文件操作,您可以将数据持久化存储在磁盘中,并在需要时读取这些数据。此外,上下文管理是Python中的一个强大工具,它可以简化资源管理,确保文件、网络连接等资源在使用完毕后能够正确关闭,避免内存泄漏和资源占用问题。

本篇文章将深入探讨Python中的文件操作与上下文管理,帮助您掌握如何在Python中处理文件以及如何高效管理资源。

在这里插入图片描述


二、Python文件操作基础

Python提供了一组内置函数用于文件的读写操作。常见的操作包括打开文件、读取文件内容、写入数据等。

1. 打开文件

在Python中,可以使用open()函数打开文件。open()函数的基本语法如下:

file = open('文件名', '模式')

其中,模式指定文件的操作模式,常用的模式如下:

  • 'r':只读模式,默认值。如果文件不存在,会抛出错误。
  • 'w':写入模式,如果文件不存在,会创建新文件;如果文件存在,会覆盖内容。
  • 'a':追加模式,在文件末尾添加内容,不会覆盖原有内容。
  • 'b':以二进制模式打开文件(可与其他模式结合使用)。

2. 读取文件

可以使用read()readline()readlines()来读取文件内容:

# 打开并读取整个文件内容
with open('example.txt', 'r') as file:content = file.read()print(content)
  • read():读取整个文件的内容。
  • readline():每次读取文件的一行。
  • readlines():将文件的每一行作为列表的元素返回。

3. 写入文件

可以使用write()方法将数据写入文件:

# 写入数据到文件
with open('output.txt', 'w') as file:file.write("Hello, Python!")

4. 文件指针定位

seek()方法可以用于移动文件指针到指定位置。tell()方法返回当前文件指针的位置。

with open('example.txt', 'r') as file:print(file.tell())  # 输出当前文件指针位置file.seek(5)  # 移动文件指针到第5个字节

三、上下文管理

在Python中,处理文件或其他资源时,必须保证在使用资源后正确释放它们。上下文管理通过with语句可以简化这一过程,确保资源在使用后被自动关闭。

1. 使用with管理文件

当使用open()函数时,如果没有使用with语句,必须手动调用close()方法来关闭文件。否则,可能会导致文件句柄未释放,产生资源泄漏问题。而使用with语句后,文件会在操作完成后自动关闭。

with open('example.txt', 'r') as file:content = file.read()

2. 自定义上下文管理器

除了文件操作,Python允许开发者通过实现__enter__()__exit__()方法来自定义上下文管理器。这两个方法分别用于在进入和退出上下文时执行特定操作。

示例代码:

class MyContextManager:def __enter__(self):print("进入上下文")return selfdef __exit__(self, exc_type, exc_val, exc_tb):print("退出上下文")with MyContextManager() as manager:print("正在执行上下文中的操作")

在这个示例中,当进入with语句时,会调用__enter__()方法;而当退出with语句时,无论是否发生异常,都会调用__exit__()方法。


四、文件操作的最佳实践

  1. 使用with语句管理文件:使用with语句能够自动管理文件资源,避免手动关闭文件可能导致的错误。
  2. 处理文件异常:通过异常处理机制,可以捕获文件操作中的错误,防止程序崩溃。
  3. 确保文件路径正确:在执行文件操作时,必须确保文件路径的正确性,避免文件找不到或路径错误。

五、案例:日志文件管理

为了更好地理解文件操作和上下文管理,我们来实现一个简单的日志文件管理器。该管理器可以记录程序运行过程中的重要事件,并将日志信息写入文件中。

1. 需求分析

  • 实现一个日志管理类Logger,能够记录日志信息并写入日志文件。
  • 每次启动程序时,自动检查日志文件的大小,如果超过一定限制,则创建新的日志文件。

2. 实现Logger

import osclass Logger:def __init__(self, file_name, max_size=1024):self.file_name = file_nameself.max_size = max_sizedef _rotate_log(self):"""检查文件大小并进行日志文件轮转"""if os.path.exists(self.file_name) and os.path.getsize(self.file_name) > self.max_size:base, ext = os.path.splitext(self.file_name)os.rename(self.file_name, f"{base}_old{ext}")def log(self, message):"""写入日志信息"""self._rotate_log()with open(self.file_name, 'a') as file:file.write(message + '\n')# 使用日志管理器
logger = Logger('app.log')logger.log("程序启动")
logger.log("执行某些操作")

在这个案例中,Logger类封装了日志记录的功能,并实现了日志文件的自动轮转。当日志文件超过指定大小时,自动重命名当前日志文件并创建新的日志文件。


六、结论

在本篇文章中,我们探讨了Python中的文件操作与上下文管理。通过学习文件读写、文件指针定位、异常处理,以及上下文管理器的用法,您可以更加灵活地处理文件操作,同时确保资源管理的安全性和高效性。

希望通过本篇文章,您能熟练掌握Python中的文件操作与上下文管理,编写出更加稳健、可靠的代码。

在下一篇文章中,我们将深入探讨Python的迭代器与生成器,继续提升Python编程技能,敬请期待!

相关文章:

【Python】从基础到进阶(八):文件操作与上下文管理

🔥 个人主页:空白诗 文章目录 一、引言二、Python文件操作基础1. 打开文件2. 读取文件3. 写入文件4. 文件指针定位 三、上下文管理1. 使用with管理文件2. 自定义上下文管理器 四、文件操作的最佳实践五、案例:日志文件管理1. 需求分析2. 实现…...

c#:System.Text.Json 的使用四(如何忽略[JsonPropertyName])

环境: .net 6.0vs2022 系列篇: 《c#:System.Text.Json 的使用一》 《c#:System.Text.Json 的使用二》 《c#:System.Text.Json 的使用三(从Newtonsoft迁移)》 《c#:System.Text.Json…...

【CPU】CPU的物理核、逻辑核、超线程判断及L1、L2、L3缓存、CacheLine和CPU的TBL说明

CPU物理核及L1、L2、L3及缓存 CPU缓存 CPU 缓存是一种用于存储临时数据以提高计算机程序性能的内存层次结构。它通常分为三个层次:L1(一级)、L2(二级)和L3(三级)缓存。缓存大小是CPU的重…...

NET WPF使用组件库HandyControl

一、背景 WPF原生控件提供的API功能不够强大&#xff0c;设置一般的功能都需要进行很复杂的配置和实现。 1.1 原生按钮控件 例如&#xff0c;原生控件<Button/> 默认效果是这样的&#xff1a; MainWindow.xaml代码&#xff1a; <Window x:Class"wpf_demo.Mai…...

计算机毕业设计之:教学平台微信小程序(

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…...

VMware Fusion虚拟机Mac版 安装Win10系统教程

Mac分享吧 文章目录 Win10安装完成&#xff0c;软件打开效果一、VMware安装Windows10虚拟机1️⃣&#xff1a;准备镜像2️⃣&#xff1a;创建虚拟机3️⃣&#xff1a;虚拟机设置4️⃣&#xff1a;安装虚拟机&#xff08;步骤和Win11安装步骤类似&#xff0c;此处相同步骤处没换…...

头戴式蓝牙耳机性价比高的有哪些?四款高能性价比机型对比推荐

在当今科技日新月异的时代&#xff0c;头戴式蓝牙耳机已经成为了我们日常生活中不可或缺的一部分&#xff0c;无论是通勤路上、健身房内还是家中休闲时&#xff0c;一副优质的头戴式蓝牙耳机都能为我们带来沉浸式的听觉体验&#xff0c;那么头戴式蓝牙耳机性价比高的有哪些&…...

Linux:make,Makefile

hello&#xff0c;各位小伙伴&#xff0c;本篇文章跟大家一起学习《Linux&#xff1a;make&#xff0c;Makefile》&#xff0c;感谢大家对我上一篇的支持&#xff0c;如有什么问题&#xff0c;还请多多指教 &#xff01; 如果本篇文章对你有帮助&#xff0c;还请各位点点赞&…...

基于代理的分布式身份管理方案

目的是使用分布式的联合计算分发去替换掉区块链中原有的类第三方可信中心的证书机制&#xff0c;更加去中心化。 GS-TBK Group Signatures with Time-bound Keys. CS-TBK 算法 Complete subtree With Time-bound Keys&#xff0c;该算法是用来辅助检测用户的签名是否有效&…...

VSCode开发ros程序无法智能提示的解决方法(一)

VSCode开发ros程序无法智能提示的解决方法&#xff08;一&#xff09; 问题解决 问题 在Ubuntu下使用vscode开发ros程序&#xff0c;无法进行智能提示。 解决 将 intelli Sense Engine 设置为 Tag Parser 即可。...

grep命令如何实现正则表达式搜索?

grep 命令支持使用正则表达式&#xff08;Regular Expression&#xff0c;简称 regex&#xff09;进行搜索 以下是一些使用正则表达式的基本示例&#xff1a; 搜索包含 “example” 的行&#xff1a; grep "example" file.txt搜索以 “abc” 开头的行&#xff1a; g…...

Vue报错 ‘vite‘ 不是内部或外部命令,也不是可运行的程序或批处理文件

报错 vue-project0.0.0 dev vite‘vite’ 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。解决 第1步. 控制台输入 npm install -g create-vite第2步. 控制台输入 npm install -g vite第3步. 运行就ok啦...

emqx代理订阅主题的方法

需求:需要代理订阅主题 mqtt/MaxVision/# 5.0以上的版本 界面操作添加就可以5.0以下版本 修改emqx.config 文件 首先在EMQX Dashboard(web端)中模块 emqx_mod_subscription 要启用修改配置 #1.切换目录 cd /home/emqx/etc#2.编辑配置文件 emqx.config vim emqx.config#3.修…...

页面关键路径渲染详解

关键路径渲染 浏览器不会等待全部资源都下载完后才进行渲染&#xff0c;而是采用渐进式的渲染方式&#xff0c;本文就介绍一下这种渐进式的渲染方式。 当浏览器获取到用于呈现网页的资源后&#xff0c;通常就会开始渲染网页。那么究竟是在什么时候就会开始渲染&#xff1f; …...

错题集锦之C语言

直接寻址和立即寻址 算法的又穷性是指算法程序的运行时间是有限的 未经赋值的全局变量值不确定 集成测试是为了发现概要设计的错误 自然连接要求两个关系中进行比较的是相同的属性&#xff0c;并且进行等值连接&#xff0c;在结果中还要把重复的属性列去掉 赋值运算符 赋值…...

【2024华为杯数学建模竞赛】E题 解题思路 | 视频特征提取

这高速公路应急车道紧急启用模型 问题 1解题思路解题思路 问题 2解题思路 问题 3解题思路 问题 1 某路段&#xff08;长度约5000m&#xff0c;行车道2应急车道1&#xff09;上有四个视频观测点&#xff08;见示意图1&#xff09;。请基于该路段四个视频数据解决如下问题&#x…...

ubuntu 执行定时任务crontab -e 无法输入的问题

界面显示 GNU nano 4.8 /tmp/crontab.l0A1HJ/crontab # Edit this file to introduce tasks to be run by cron. # # Each task to run has to be defined t…...

快速响应:提升前端页面加载速度技巧的必知策略方案

在本文中&#xff0c;我们将深入探讨导致页面加载缓慢的常见原因&#xff0c;并分享一系列切实可行的优化策略&#xff0c;无论你是刚入门的新手&#xff0c;还是经验丰富的开发者&#xff0c;这些技巧都将帮助你提升网页性能&#xff0c;让你的用户体验畅快无阻。 相信作为前端…...

VUE-CLI配置全局SCSS变量

一.引入node-sass和sass-loader依赖 npm install --save-dev sass-loader node-sass 二. 在项目根目录中创建一个scss变量文件&#xff0c;比如constant.scss&#xff1a; 三.在vue.config.js文件中引入这个变量文件&#xff1a; // vue.config.js module.exports {css: {l…...

前端JavaScript导出excel,并用excel分析数据,使用SheetJS导出excel

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f…...

PyTorch 2.5 + Jupyter 开发环境搭建:5分钟搞定AI模型训练与调试

PyTorch 2.5 Jupyter 开发环境搭建&#xff1a;5分钟搞定AI模型训练与调试 1. 环境准备与快速部署 PyTorch 2.5作为当前最流行的深度学习框架之一&#xff0c;其开箱即用的特性让AI开发变得前所未有的简单。我们将使用预配置好的PyTorch-CUDA基础镜像&#xff0c;快速搭建完…...

技术无罪,人心可畏 —— 写在 315 “GEO 投毒” 话题之后

2026 年央视 315 晚会&#xff0c;将镜头对准了人工智能领域的灰色地带 ——“AI 投毒” 与 “GEO” 一夜之间成为公众热议的话题。记者虚构了一款名为 “Apollo-9” 的智能手环&#xff0c;借助 “GEO 优化系统” 批量生成虚假内容&#xff0c;短短数小时就让多个主流 AI 大模…...

jsDelivr CDN:如何为你的开源项目选择最佳加速方案

1. 为什么你的开源项目需要jsDelivr CDN 作为一个开源项目维护者&#xff0c;我深刻理解静态资源加载速度对用户体验的影响。去年我的一个Vue组件库项目就遇到过这样的问题&#xff1a;海外用户访问飞快&#xff0c;但国内用户总是抱怨加载缓慢。直到我把资源托管到jsDelivr&am…...

用LED条形图可视化74HC154译码效果:STC89C52项目入门指南

用LED条形图可视化74HC154译码效果&#xff1a;STC89C52项目入门指南 第一次接触单片机时&#xff0c;看到那些闪烁的LED灯总让人充满好奇——它们是怎么按照我们的想法亮起来的&#xff1f;今天我们就用STC89C52单片机和74HC154译码器&#xff0c;亲手搭建一个会"跳舞&q…...

Phi-3-mini-4k-instruct-gguf步骤详解:supervisor服务管理与错误日志定位方法

Phi-3-mini-4k-instruct-gguf步骤详解&#xff1a;supervisor服务管理与错误日志定位方法 1. 模型概述 Phi-3-mini-4k-instruct-gguf是微软Phi-3系列中的轻量级文本生成模型GGUF版本&#xff0c;特别适合问答、文本改写、摘要整理和简短创作等场景。这个开箱即用的解决方案已…...

Python安全开发之简易Xss检测工具(详细注释)

核心代码&#xff1a;import requests # requests 库 - HTTP 请求处理库 # 【常用功能】: # requests.get(url) - 发送 HTTP GET 请求 # requests.post(url, data) - 发送 HTTP POST 请求 # response.text - 获取响应体内容&#xff08;字符串&#xff09; #…...

Linux服务器日志爆满?5个实用命令快速定位并清理大日志文件

Linux服务器日志爆满&#xff1f;5个实用命令快速定位并清理大日志文件 当服务器磁盘空间告急时&#xff0c;日志文件往往是罪魁祸首。作为系统管理员&#xff0c;我们需要快速定位问题并安全清理&#xff0c;避免服务中断。本文将分享5个核心命令的组合使用技巧&#xff0c;帮…...

格式化字符串漏洞利用的5种常见手法:以CTFshow题目为例

格式化字符串漏洞实战&#xff1a;5种高级利用手法与CTFshow案例分析 格式化字符串漏洞&#xff08;Format String Vulnerability&#xff09;是二进制安全领域中最经典也最危险的漏洞类型之一。这种漏洞源于程序员错误地将用户输入直接作为格式化字符串参数传递给printf、spri…...

Phi-4-mini-reasoning效果展示:同参数量级中推理准确率超Llama3-8B实测对比

Phi-4-mini-reasoning效果展示&#xff1a;同参数量级中推理准确率超Llama3-8B实测对比 1. 开篇亮点&#xff1a;小模型的大智慧 Phi-4-mini-reasoning这款仅有3.8B参数的轻量级开源模型&#xff0c;正在重新定义我们对小模型能力的认知。作为专为数学推理、逻辑推导和多步解…...

深度解析:基于摄像头的远程生理监测工具箱rPPG-Toolbox实战指南

深度解析&#xff1a;基于摄像头的远程生理监测工具箱rPPG-Toolbox实战指南 【免费下载链接】rPPG-Toolbox rPPG-Toolbox: Deep Remote PPG Toolbox (NeurIPS 2023) 项目地址: https://gitcode.com/gh_mirrors/rp/rPPG-Toolbox 远程生理监测技术正在医疗健康领域引发革命…...