示例

# 使用 with 语句打开文件并读取内容
with open('pi.txt', 'r') as file_object:contents = file_object.read()print(contents)
# 文件在代码块结束后自动关闭

with 解析

with 是 Python 中的上下文管理器语法,用于确保某个操作完成后自动执行清理操作。它常用于文件操作、锁操作等场景。

with 的基本语法:


with <context_manager> as <variable>:# 在这个代码块中,可以使用 <variable># 当代码块执行完毕时,会自动执行清理操作

<context_manager>:上下文管理器对象,它必须实现了上下文管理协议(即 enter() 和 exit() 方法)。常与open函数结合使用内部为(file, mode)

with open(file, mode) as variable:# 在这个代码块中,可以对文件进行操作# 当代码块执行完毕时,文件会自动关闭

<variable>:上下文管理器的 enter() 方法返回的对象,通常是一个资源(如文件对象、锁对象等)。

代码块:在代码块中可以对 进行操作。

自动清理:当代码块执行完毕时,会自动调用上下文管理器的 exit() 方法,执行清理操作。

with 的工作原理

with 语句的核心在于上下文管理器协议,它包含两个方法:
__enter__():在代码块执行之前调用。
返回一个资源对象(如文件对象),这个对象会被赋值给 as 后面的变量。
__exit__():在代码块执行完毕时调用。
用于执行清理操作,例如关闭文件、释放锁等。
如果代码块中发生异常,exit() 方法会捕获异常并可以选择处理它。

文件操作

文件对象是一个典型的上下文管理器,它实现了 enter() 和 exit() 方法。
enter():打开文件并返回文件对象。
exit():关闭文件。

with open('pi.txt', 'r') as file_object:contents = file_object.read()print(contents)
# 文件在代码块结束后自动关闭

逐行解析:
with open('pi.txt', 'r') as file_object::

open('pi.txt', 'r') 返回一个文件对象。
文件对象的 enter() 方法被调用,返回文件对象本身。
文件对象被赋值给变量 file_object。

contents = file_object.read():
使用 file_object 调用 read() 方法,读取文件内容。

print(contents):
打印文件内容。

代码块结束后:
自动调用文件对象的 exit() 方法,关闭文件。

优点

with open(file, mode) as variable:# 在这个代码块中,可以对文件进行操作# 当代码块执行完毕时,文件会自动关闭

自动关闭文件:使用 with 语句时,文件会在代码块执行完毕后自动关闭,即使在文件操作过程中发生异常,文件也会被正确关闭。
代码更简洁:避免了手动调用 file.close(),使代码更加简洁易读。

open 解析

open 是 Python 中用于打开文件的内置函数,它的语法如下:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

虽然 open 函数有很多参数,但在实际使用中,通常只需要关注前两个参数:file 和 mode。

(1) file 参数

作用:指定要打开的文件路径。
类型:字符串,可以是相对路径或绝对路径。
相对路径:相对于当前工作目录的路径。例如:

open('pi.txt')  # 当前工作目录下的文件
open('data/pi.txt')  # 当前工作目录下的 data 文件夹中的文件

绝对路径:从根目录开始的完整路径。例如:

open('/home/user/data/pi.txt')  # Linux 系统中的绝对路径
open('C:\\Users\\User\\data\\pi.txt')  # Windows 系统中的绝对路径

(2) mode 参数

作用:指定文件的打开模式,默认值为 ‘r’(只读模式)。
常见模式:
‘r’:只读模式。如果文件不存在,会抛出 FileNotFoundError。
‘w’:写入模式。如果文件不存在,会创建一个新文件;如果文件已存在,会清空文件内容。
‘x’:独占写入模式。如果文件不存在,会创建一个新文件;如果文件已存在,会抛出 FileExistsError。
‘a’:追加模式。如果文件不存在,会创建一个新文件;如果文件已存在,会在文件末尾追加内容。
‘t’:文本模式(默认)。以文本形式读写文件。
‘b’:二进制模式。以二进制形式读写文件,适用于读取图片、视频等二进制文件。
‘+’:更新模式。用于同时读写文件。

用法示例

只读模式

‘r’:只读模式(默认模式)。如果文件不存在,会抛出 FileNotFoundError。

with open('pi.txt', 'r') as file_object:contents = file_object.read()print(contents)

写入模式

‘w’:写入模式。如果文件不存在,会创建一个新文件;如果文件已存在,会清空文件内容。

with open('pi.txt', 'w') as file_object:file_object.write("Hello, world!")

注意:使用 ‘w’ 模式时要小心,因为文件内容会被清空。

追加模式

‘a’:追加模式。如果文件不存在,会创建一个新文件;如果文件已存在,会在文件末尾追加内容。

with open('pi.txt', 'a') as file_object:file_object.write("\nThis is a new line.")

独占写入模式

‘x’:独占写入模式。如果文件不存在,会创建一个新文件;如果文件已存在,会抛出 FileExistsError。

with open('pi.txt', 'x') as file_object:file_object.write("Hello, world!")

用途:确保文件不会被覆盖。

文本模式

‘t’:文本模式(默认模式)。以文本形式读写文件。

with open('pi.txt', 'r') as file_object:contents = file_object.read()print(contents)

二进制模式

‘b’:二进制模式。以二进制形式读写文件,适用于读取图片、视频等二进制文件。

with open('image.png', 'rb') as file_object:contents = file_object.read()

更新模式

‘+’:更新模式。用于同时读写文件。

with open('pi.txt', 'r+') as file_object:contents = file_object.read()file_object.write("\nThis is a new line.")

组合模式

‘r+’:读写模式。文件必须存在,可以读取和写入。

with open('pi.txt', 'r+') as file_object:contents = file_object.read()file_object.write("\nThis is a new line.")

‘w+’:写读模式。如果文件不存在,会创建一个新文件;如果文件已存在,会清空文件内容,然后可以读取和写入。

with open('pi.txt', 'w+') as file_object:file_object.write("Hello, world!")file_object.seek(0)  # 移动文件指针到文件开头contents = file_object.read()print(contents)

‘a+’:追加读写模式。如果文件不存在,会创建一个新文件;如果文件已存在,会在文件末尾追加内容,同时可以读取文件。

with open('pi.txt', 'a+') as file_object:file_object.write("\nThis is a new line.")file_object.seek(0)  # 移动文件指针到文件开头contents = file_object.read()print(contents)

二进制组合模式

‘rb+’:二进制读写模式。
‘wb+’:二进制写读模式。
‘ab+’:二进制追加读写模式。

选择模式的建议

读取文件:使用 ‘r’ 或 ‘rb’(二进制模式)。
写入文件:使用 ‘w’ 或 ‘wb’(二进制模式)。
追加内容:使用 ‘a’ 或 ‘ab’(二进制模式)。
同时读写:使用 ‘r+’、‘w+’ 或 ‘a+’,并根据需要选择二进制模式。

常见问题

文件不存在

如果文件不存在,open 函数会抛出 FileNotFoundError
解决方法:

  • 确保文件路径正确。
  • 使用异常处理捕获错误:
try:with open('pi.txt', 'r') as file_object:contents = file_object.read()print(contents)
except FileNotFoundError:print("文件未找到,请检查路径是否正确。")

文件模式错误

如果文件模式不正确(例如以写入模式打开只读文件),会抛出错误。
解决方法:

  • 确保文件模式与操作匹配。
  • 使用异常处理捕获错误。

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

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

相关文章

Acrel-1000系列分布式光伏监控系统在湖北荆门一马光彩大市场屋顶光伏发电项目中应用

摘 要&#xff1a;分布式光伏发电能够对日益严重的环境压力起到有效缓解作用,在当前对环境保护需求越来越大情况下,发电行业在发展中不但要提升发电效率,同时也需要降低成本。分布式光伏发电主要是利用风能和太阳能等可再生清洁能源进行发电,对于空气质量具有改善效果,和传统发…

CentOS-6与CentOS-7的网络配置IP设置方式对比 笔记250706

CentOS-6与CentOS-7的网络配置IP设置方式对比 笔记250706 1️⃣ 参考 1 CentOS-6 与 CentOS-7 的网络配置IP设置方式对比 CentOS 6 和 CentOS 7 在网络配置上存在显著差异&#xff0c;主要体现在配置文件结构、管理工具、服务机制和命令集等方面。以下是两者的核心对比&#x…

【网络系列】HTTP 429 状态码

博客目录 HTTP 429 状态码的定义与背景产生 429 错误的常见场景1. API 速率限制触发2. 网络爬虫行为被检测3. 分布式拒绝服务(DDoS)防护4. 用户/IP 特定限流策略5. 应用程序逻辑错误 深入解读 429 响应的关键头部信息Retry-After 头部X-RateLimit 系列头部RateLimit 标准化头部…

C++无锁数据结构:CAS(Compare-and-Swap)

在高并发场景下&#xff0c;传统锁机制带来的线程阻塞和上下文切换开销成为性能瓶颈。无锁数据结构通过原子操作实现线程安全&#xff0c;避免了锁的使用&#xff0c;成为高性能系统的关键技术。本文将深入探讨C中基于CAS&#xff08;Compare-and-Swap&#xff09;的无锁数据结…

【数字图像处理】

数字图像处理 绪论1. 数字图像处理基本概念2. 数字图像处理系统的组成3. 数字图像处理技术研究的内容4. 数字图像处理技术的应用领域5. 图像处理技术涉及的学科领域 图像处理基础1. 电磁波谱与可见光谱2. 人眼的亮度视觉特性3. 图像的表示4. 空间分辨率和灰度级分辨率5. 像素间…

linux chrome浏览器打不开了

报错信息 通过terminal执行google-chrome [12714:12714:0706/223620.723519:ERROR:chrome/browser/process_singleton_posix.cc:358] The profile appears to be in use by another Google Chrome process (54949) on another computer (192.168.0.17). Chrome has locked t…

Python:模块

一、Python模块基础概念 1. 什么是Python模块&#xff1f; 在 Python 中&#xff0c;模块&#xff08;Module&#xff09; 是一个包含 Python 代码的文件&#xff08;扩展名为 .py&#xff09;&#xff0c;用于组织代码、实现功能复用和命名空间管理。模块可以包含变量、函数…

C 语言指针与作用域详解

一、指针基础概念 &#xff08;一&#xff09;指针的本质 指针是 C 语言中一个重要的概念&#xff0c;其本质是内存地址。在计算机内存中&#xff0c;每个字节都有唯一的编号&#xff0c;这个编号就是我们所说的内存地址&#xff0c;而指针变量就是用于存储这些内存地址的变量…

解锁阿里云ACK:开启Kubernetes容器化应用新时代

引言&#xff1a;云原生时代下的 ACK 在当今数字化飞速发展的时代&#xff0c;云原生技术正以前所未有的速度改变着软件开发和部署的格局。随着企业对应用敏捷性、弹性扩展以及成本优化的需求日益增长&#xff0c;云原生已成为众多企业实现数字化转型的关键路径。在云原生的技…

【C++基础】内存管理四重奏:malloc/free vs new/delete - 面试高频考点与真题解析

在 C/C 编程中&#xff0c;内存管理是核心基础技能&#xff0c;而malloc/free和new/delete作为两套内存分配释放机制&#xff0c;是面试中高频出现的考点。 一、内存管理的 "双生花"&#xff1a;基础概念解析 1.1 malloc/free&#xff1a;C 语言的内存管家 malloc全…

Dify+Ollama+QwQ:3步本地部署,开启AI搜索新篇章

如何来评价本地化部署的价值与优势分析&#xff1a; 成本优化与隐私保障 自定义搜索插件&#xff0c;告别信息过载 一键生成报告、分析&#xff0c;效率翻倍&#xff01; 接下来我们就尝试跟随来部署本地的价值所在! 1&#xff1a;安装Ollama & 部署QwQ模型 1.1 安装O…

FAISS 简介及其与 GPT 的对接(RAG)

什么是 FAISS&#xff1f; FAISS (Facebook AI Similarity Search) 是 Facebook AI 团队开发的一个高效的相似性搜索和密集向量聚类的库。它主要用于&#xff1a; 大规模向量相似性搜索高维向量最近邻检索向量聚类 https://github.com/facebookresearch/faissFAISS 特别适合处理…

【Apache Doris 深度实战:从 MPP 架构到实时分析,解锁三大数据模型的性能优化秘籍】

一、安装部署 安装教程&#xff1a;GitHub地址 Doc文档&#xff1a;Apache Doris 简介 - Apache Doris 二、功能及作用 Apache Doris 是一款基于MPP 架构的高性能、实时分析型数据库。它以高效、简单和统一的特性著称&#xff0c;能够在亚秒级的时间内返回海量数据的查询结果…

MySQL主从复制与读写分离概述

前言&#xff1a; 在数据驱动的现代应用中&#xff0c;数据库面临高并发读写与海量存储的双重挑战。单一数据库实例在性能、可用性及扩展性上逐渐成为瓶颈。MySQL主从复制&#xff08;Master-Slave Replication&#xff09;与读写分离&#xff08;Read/Write Splitting&#xf…

数据库-元数据表

1. 什么是元数据表元数据&#xff1a;数据的数据&#xff0c;用以描述数据的信息也是数据&#xff0c;被称为元数据2. 获取元数据的方法MySQL提供了以下三种方法用于获取数据库对象的元数据&#xff1a;show语句从INFORMATION_SCHEMA数据库里查询相关表&#xff08;information…

【STM32】通用定时器PWM

STM32 通用定时器 PWM 输出完全解析&#xff08;以 TIM3_CH1 为例&#xff09; PWM 输出基本原理 PWM&#xff08;Pulse Width Modulation&#xff09;即脉冲宽度调制&#xff0c;是由定时器通过比较 CNT 与 CCR 寄存器实现的。 信号产生原理&#xff1a; ARR 决定周期&#…

python学习打卡:DAY 21 常见的降维算法

知识点回顾&#xff1a; LDA线性判别PCA主成分分析t-sne降维 还有一些其他的降维方式&#xff0c;也就是最重要的词向量的加工&#xff0c;我们未来再说 浙大疏锦行

基于SpringBoot和Leaflet集成在线天气服务的区县当前天气WebGIS实战

目录 前言 一、需求描述 1、功能需求 2、技术实现流程 二、SpringBoot后台实现 1、控制层实现 2、区县数据返回 三、WebGIS前端实现 1、区位信息展示 2、天气信息展示 四、成果展示 1、魔都上海 2、蜀地成都 3、湖南桂东 五、总结 前言 在当今数字化时…

文心开源:文心大模型4.5系列全面开放,AI普惠时代加速到来

一场由4240亿参数模型领衔的开源盛宴&#xff0c;正在重塑中国AI生态的底层逻辑 2025年6月30日&#xff0c;百度如约宣布全面开源其旗舰产品——文心大模型4.5系列。一次性开源10款模型&#xff0c;覆盖从4240亿参数的MoE多模态巨无霸到轻巧的0.3B端侧模型&#xff0c;并同步开…

【运算放大器专题】基础篇

1.1 运算放大器是放大了个寂寞吗&#xff1f;—初识运算放大器 为了解决震荡问题&#xff0c;人为加了一些补偿网络之后导致的高频特性差 1.2欧姆定律和独立源 1正弦2方波3脉冲 电压源是平行于i轴的横线 1.3有伴源和运放缓冲器 有伴指的是有电阻&#xff0c;有伴是坏事&#…