【Python】文件打開:with open具體解析

示例

# 使用 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;有伴是壞事&#…