Python 文件操作與異常處理全解析

目錄

一、文件的基本概念

1. 什么是文件

2. 文件操作的核心內容

3. 文件操作的作用

二、文件的基本操作

1. 文件操作三步走

2. 打開文件:open () 函數

2.1 文件路徑

2.2 常用 mode 模式

3. 寫入文件:write () 函數

4. 關閉文件:close () 函數

5. 解決中文亂碼問題

6. 文件的讀取操作

6.1 read (size) 方法:

6.2 readlines () 方法:

6.3 readline () 方法:

三、文件備份案例

1. 案例需求

2. 實現思路

3. 代碼實現

四、文件和文件夾操作

1. os 模塊

2. 與文件操作相關的方法

3. 與文件夾操作相關的方法

4. 遞歸刪除非空文件夾

五、Python 異常處理

1. 什么是異常

2. 異常捕獲:try...except

3. 捕獲異常并輸出錯誤信息

4. 異常捕獲中的 else 語句

5. 異常捕獲中的 finally 語句

總結


在 Python 編程中,文件操作是數據持久化的核心手段,而異常處理則是保證程序健壯性的關鍵。本文將系統梳理文件操作的核心知識與異常處理的實用技巧,幫助你輕松掌握這兩項重要技能。

一、文件的基本概念

1. 什么是文件

文件是計算機中用于長久存儲數據的基本單位,它將數據組織成可管理的形式,便于檢索和使用。內存中的數據在計算機關機后會消失,而文件可以將數據保存到硬盤、U 盤等存儲設備中。

從類型上看,文件可分為文本文件(如 TXT、HTML)、圖像文件(如 JPEG、PNG)、音頻文件(如 MP3、WAV)、視頻文件(如 MP4、AVI)以及可執行文件(如 EXE、DLL)等多種類別。

2. 文件操作的核心內容

日常對文件的主要操作包括:

(1)創建文件

(2)打開文件

(3)讀寫文件

(4)文件備份

(5)關閉文件

3. 文件操作的作用

文件操作能將程序運行過程中產生的數據存儲起來,使得程序下次執行時可以直接使用這些數據,無需重新生成,極大地提高了程序的效率和實用性。

二、文件的基本操作

1. 文件操作三步走

(1)打開文件

(2)讀寫文件

(3)關閉文件

2. 打開文件:open () 函數

在 Python 中,使用open()函數打開文件,語法如下:

f = open(name, mode)

(1)name:要打開的目標文件名(可包含具體路徑)

(2)mode:打開文件的模式(訪問模式)

(3)返回值:file 文件對象,后續操作通過該對象的方法實現

    2.1 文件路徑

    ? (1)絕對路徑:從盤符開始的完整路徑,如 Windows 系統中的C:\Python\python.txt,Linux 系統中的/usr/local/nginx/conf/nginx.conf。絕對路徑固定,但文件移動或程序遷移時較麻煩。

    (2)相對路徑:以 Python 文件本身為參考點的路徑:

    2.2 常用 mode 模式

      • 同級關系:直接使用文件名
      • 上級關系:通過../訪問(多級可使用../../等)88
      • 下級關系:通過文件夾名/文件名訪問
    模式描述
    r只讀模式,文件不存在則報錯,光標在文件開頭(默認模式)
    w只寫模式,文件不存在則創建,寫入時清空原有內容,光標在開頭
    a追加模式,文件不存在則創建,在文件尾部追加內容,光標在結尾
    r+讀寫模式,光標在文件開頭
    w+讀寫模式,寫入時清空原有內容
    a+讀寫模式,光標在文件結尾,打開時為追加模式
    rb、wb、ab 等對應模式的二進制操作,適用于圖片、音頻、視頻等文件

    提示:記住r(讀)、w(寫)、a(追加)三個基礎模式即可應對大部分場景,帶+的模式支持讀寫,帶b的模式用于二進制文件操作。

    3. 寫入文件:write () 函數

    基本語法:

    f.write('要寫入的內容')  # 內容需為字符串類型
    

    4. 關閉文件:close () 函數

    f.close()  # 關閉文件,釋放資源
    

    5. 解決中文亂碼問題

    默認編碼可能導致中文亂碼,打開文件時指定encoding='utf-8'?即可:

    f = open('python.txt', 'w', encoding='utf-8')
    f.write('人生苦短,我學Python!')
    f.close()
    

    6. 文件的讀取操作

    6.1 read (size) 方法:

    (1)讀取指定長度(size)的內容,單位為字符 / 字節

    (2)不傳入 size 則讀取全部內容

    f = open('python.txt', 'r', encoding='utf-8')contents = f.read() ?# 讀取所有內容# contents = f.read(1024) ?# 讀取1024個字符print(contents)f.close()

    6.2 readlines () 方法:

    按行讀取整個文件內容,返回列表(每行數據為一個元素)

    f = open('python.txt', 'r', encoding='utf-8')lines = f.readlines()for line in lines:print(line, end='') ?# end=''避免重復換行f.close()

    6.3 readline () 方法:

    一次讀取一行內容,每次調用后光標下移一行

    f = open('python.txt', encoding='utf-8')while True:content = f.readline()if not content: ?# 讀取完畢則退出循環breakprint(content, end='')f.close()

    三、文件備份案例

    1. 案例需求

    用戶輸入當前目錄下任意文件名,程序生成該文件的備份(備份文件名為xx[備份].后綴,如test[備份].txt)。

    2. 實現思路

    (1)接收用戶輸入的文件名

    (2)規劃備份文件名(拆分文件名和后綴,拼接備份名稱)

    (3)讀取源文件內容,寫入備份文件

    3. 代碼實現

    # 1. 接收用戶輸入的文件名
    oldname = input('請輸入要備份的文件名稱:')# 2. 規劃備份文件名
    index = oldname.rfind('.')  # 從右邊查找第一個'.'的下標
    if index > 0:name = oldname[:index]  # 獲取文件名postfix = oldname[index:]  # 獲取文件后綴newname = name + '[備份]' + postfix  # 拼接備份文件名# 3. 備份文件操作(使用二進制模式兼容所有文件類型)old_f = open(oldname, 'rb')new_f = open(newname, 'wb')# 循環讀取并寫入內容while True:content = old_f.read(1024)  # 每次讀取1024字節if len(content) == 0:  # 讀取完畢breaknew_f.write(content)# 關閉文件old_f.close()new_f.close()
    else:print('請輸入正確的文件名稱,否則無法進行備份操作...')
    

    四、文件和文件夾操作

    1. os 模塊

    Python 通過os模塊實現文件和文件夾的操作,使用前需先導入:

    import os
    

    2. 與文件操作相關的方法

    函數功能
    os.rename (舊文件名,新文件名)重命名文件
    os.remove (文件名)刪除文件

    案例

    import os
    import time# 重命名文件
    os.rename('python.txt', 'linux.txt')
    time.sleep(10)  # 休眠10秒
    # 刪除文件
    os.remove('linux.txt')
    

    3. 與文件夾操作相關的方法

    函數功能
    os.mkdir (文件夾名)創建文件夾
    os.getcwd()獲取當前工作目錄
    os.chdir (目錄名)切換工作目錄
    os.listdir (目錄名)獲取指定目錄下的所有文件和文件夾,返回列表
    os.rmdir (目錄名)刪除空文件夾

    案例

    import os
    import time# 創建文件夾(判斷是否存在,避免報錯)
    if not os.path.exists('images'):os.mkdir('images')
    if not os.path.exists('images/avatar'):os.mkdir('images/avatar')# 獲取當前目錄
    print(os.getcwd())# 切換目錄
    os.chdir('images/avatar')
    print(os.getcwd())  # 顯示當前目錄
    os.chdir('../../')  # 切換回上兩級目錄# 獲取目錄下的內容
    print(os.listdir())time.sleep(10)
    # 刪除空文件夾
    os.rmdir('images/avatar')
    

    4. 遞歸刪除非空文件夾

    使用shutil模塊的rmtree()方法可刪除非空文件夾(慎重使用!):

    import shutil# 遞歸刪除文件夾及其內容
    shutil.rmtree('要刪除的文件夾路徑')
    

    五、Python 異常處理

    1. 什么是異常

    當程序運行過程中檢測到錯誤時,解釋器無法繼續執行,會拋出錯誤提示,這就是異常。例如除數為 0、讀取不存在的文件等。

    2. 異常捕獲:try...except

    基本語法:

    try:可能發生錯誤的代碼
    except:如果出現異常執行的代碼
    

    案例

    try:# 嘗試讀取文件f = open('python.txt', 'r', encoding='utf-8')content = f.readlines()print(content)
    except:# 發生異常時創建文件print("文件不存在,已創建新文件")f = open('python.txt', 'w', encoding='utf-8')f.write('這是新創建的文件')f.close()
    

    3. 捕獲異常并輸出錯誤信息

    使用Exception as e捕獲所有異常并獲取錯誤信息:

    try:f = open('python.txt', 'r', encoding='utf-8')content = f.readlines()
    except Exception as e:print("錯誤信息:", e)  # 輸出錯誤描述print("錯誤參數:", e.args)  # 輸出錯誤參數(元組)
    finally:f.close()
    

    4. 異常捕獲中的 else 語句

    else語句用于執行無異常時的代碼:

    try:print(1 / 2)  # 無異常
    except Exception as e:print(e)
    else:print("沒有發生異常,執行else語句")
    

    5. 異常捕獲中的 finally 語句

    finally語句用于無論是否發生異常都必須執行的代碼(如關閉文件):

    try:f = open('python.txt', 'r', encoding='utf-8')content = f.readlines()
    except:print("發生異常")f = open('python.txt', 'w', encoding='utf-8')f.write('異常時創建')
    else:print("無異常,內容:", content)
    finally:f.close()  # 無論是否異常都關閉文件print("finally語句必執行")
    

    總結

    文件操作是 Python 處理數據持久化的基礎,掌握open()、read()、write()、close()等方法,以及os模塊的文件和文件夾操作,能讓你輕松管理計算機中的數據。而異常處理機制(try...except...else...finally)則能有效捕獲和處理程序運行中的錯誤,提高程序的穩定性和健壯性。結合兩者,可編寫更可靠、實用的 Python 程序。

    本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
    如若轉載,請注明出處:http://www.pswp.cn/web/94013.shtml
    繁體地址,請注明出處:http://hk.pswp.cn/web/94013.shtml
    英文地址,請注明出處:http://en.pswp.cn/web/94013.shtml

    如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

    相關文章

    領碼方案:通用物聯網數據采集低代碼集成平臺——萬物智聯時代的黃金鑰匙

    摘要: 領碼方案通過“協議抽象層低代碼引擎AI智能中樞”架構,實現物聯網設備數據采集、存儲、分析的零代碼配置化集成。支持200工業協議即插即用,10分鐘完成設備上云,數據流轉效率提升70%,AI模型調用耗時降低90%。該方…

    后臺管理系統-10-vue3之用戶管理組件配置子路由和靜態頁面

    文章目錄 1 配置子路由 1.1 router/index.js(添加路由) 1.2 views/User.vue(用戶管理) 1.3 驗證路由是否生效 2 User.vue(靜態頁面) 2.1 搜索框和表格的靜態搭建 2.2 用戶表格的數據獲取渲染 2.2.1 user.js(準備數據) 2.2.2 mock.js(攔截請求的URL) 2.2.3 api.js(axios請求的UR…

    AMPAK正基科技系列產品有哪些廣泛應用于IOT物聯網

    關於正基AMPAK 智慧物聯網 無線射頻模組專家 專業品牌 正基科技是一家擁有超過 20 年無線模組研發、設計、生產、行銷與產品技術整合服務經驗的公司。 有專業的高頻模組硬體設計及軟體整合工程師團隊,具備豐富的客戶應用經驗,能因應客戶與市場導向的產品…

    【PyTorch】環境配置

    文章目錄1. 配置cuda環境2. 配置conda環境3. 配置pytorch gpu環境1. 配置cuda環境 在命令行輸入以下命令可以查看當前顯卡驅動版本和最高支持的cuda版本 nvidia-smi根據cuda版本去官網下載并安裝cuda 下載鏈接:https://developer.nvidia.com/cuda-toolkit-archive…

    vue3實現實現手機/PC端錄音:recorder-core

    通過 recorder-core 這個插件實現錄音recorder-core插件使用下方的js文件是安裝后封裝的一個js文件,在需要使用的地方直接引入這個文件:import record from “./recorderCore.js”;// 文件名稱:recorderCore.js// recorder-core插件使用方式…

    deepseek 本地部署,如何支持工具調用

    這里需要考慮顯卡是否和模型匹配,支不支持推理 先把模版拉取到本地:git clone https://github.com/sgl-project/sglang.git 我的位置是 /data/home/sglang 注意模版位于sglang下的examples/chat_template中 根據對應的模版部署模型,比如 …

    Excel中運行VB的函數

    “插入” -》 “模塊”Function FormatCodeFlex(inputStr As String, Optional defaultVal As String "0") As StringOn Error GoTo ErrorHandlerDim parts() As StringDim i As Integer 使用 "-" 分割字符串parts Split(inputStr, "-") 確保至…

    《零基礎入門AI:深度學習之NLP基礎學習》

    一、自然語言處理(NLP)概述 1. 基本概念 ? 自然語言處理(Natural Language Processing, NLP)是人工智能與計算語言學交叉的核心領域,致力于實現計算機對人類自然語言的自動理解、分析、生成與交互。其研究目標在于構…

    保姆級Debezium抽取SQL Server同步kafka

    前言: Debezium SQL Server連接器捕獲SQL Server數據庫模式中發生的行級更改。 官方2.0文檔: Debezium connector for SQL Server :: Debezium Documentation 有關與此連接器兼容的SQL Server版本的信息,請參閱 SQL Server Database: 201…

    鴻蒙安卓前端中加載丟幀:ArkWeb分析

    序章:卡頓的數字世界 在每秒60幀的視覺交響樂中,每一幀都是精心編排的節拍。當這些節拍開始丟失——就像交響樂中突然靜音的提琴部——我們便遭遇了加載丟幀的數字噩夢。這不是簡單的性能下降,而是一場渲染管線的全面崩潰,是數字…

    Spring Cloud Netflix學習筆記06-Zuul

    文章目錄概述什么是Zuul?Zuul 能干嘛?Zuul入門案例pom依賴application.yml啟動類隱藏真實路徑概述 什么是Zuul? Zuul包含了對請求的路由(用來跳轉的)和過濾兩個最主要功能: 其中路由功能負責將外部請求轉發到具體的微服務實例上,是實現外…

    c# 和 c++ 怎樣結合

    c# 和 c 怎樣結合在軟件開發中,C# 和 C 通常用于不同的場景和目的,但有時需要將它們結合使用以充分利用兩種語言的優點。以下是幾種常見的方法來實現 C# 和 C 的結合:1. P/Invoke(Platform Invocation Services)P/Invo…

    開源分布式數據庫(Dgraph)

    Dgraph 是一款專為處理復雜關系數據設計的開源分布式圖數據庫,核心目標是提供高性能、高可擴展性的圖數據存儲與查詢能力。其設計融合了原生圖模型與分布式架構,支持 GraphQL 查詢語言,適用于社交網絡、知識圖譜、推薦系統等場景。 一、技術架…

    Apache ShenYu和Nacos之間的通信原理

    這是一個非常經典的服務注冊發現和動態配置管理的案例。ShenYu 作為網關,需要實時感知后端微服務的上線、下線以及其元數據信息(如 API 接口列表)的變化,同時它自身的配置也可能需要動態調整。Nacos 則作為注冊中心和配置中心,扮演了“服務電話簿”和“動態配置倉庫”的角…

    強制重啟導致Ubuntu24.04LTS amd的WIFI無法使用的解決方案

    強制重啟導致Ubuntu24.04LTS amd的WIFI無法使用的解決方案 前言 ? 我按下了<ctrl><alt><prtsc>組合鍵&#xff0c;然后按住<ctrl><alt>不放&#xff0c;讓我的死機的圖形化的Ubuntu強制重啟&#xff0c;然后再次打開發現&#xff0c;我的ubu…

    Java基礎面試題02

    引用&#xff1a;&#xff08;代碼隨想錄的八股轉免費了&#xff09;以下為網址 卡碼筆記 本文為學習以上文章的筆記&#xff0c;如果有時間推薦直接去原網址 Java中的數據類型有哪些&#xff1f;分為哪兩大類&#xff1f; (考點&#xff1a;Java數據類型及其分類) 【簡單】 基…

    RabbitMQ:SpringAMQP Fanout Exchange(扇型交換機)

    目錄一、案例需求二、基礎配置三、代碼實現扇形交換機也叫做廣播交換機&#xff0c;通過交換機將消息發送給所有的隊列。 生產者源碼 消費者源碼 一、案例需求 在RabbitMQ控制臺中&#xff0c;聲明隊列fanout.queue1和fanout.queue2。在RabbitMQ控制臺中&#xff0c;聲明交換…

    深度解析DeepSeek V3.1 :6850 億參數開源模型如何以 71.6% 編碼得分、68 倍成本優勢重構全球 AI 競爭格局

    深度解析DeepSeek V3.1 &#xff1a;6850 億參數開源模型如何以 71.6% 編碼得分、68 倍成本優勢重構全球 AI 競爭格局當DeepSeek悄然將其 6850 億參數的 V3.1 模型上傳至 Hugging Face 平臺時&#xff0c;這個看似低調的舉動卻在全球 AI 領域投下了一顆 “深水炸彈”。這款融合…

    Java 大視界 -- Java 大數據在智能安防視頻監控系統中的視頻內容理解與智能預警升級(401)

    Java 大視界 -- Java 大數據在智能安防視頻監控系統中的視頻內容理解與智能預警升級&#xff08;401&#xff09;引言&#xff1a;正文&#xff1a;一、傳統安防監控的 “三重困局”&#xff1a;看不全、看不懂、反應慢1.1 人工盯屏 “力不從心”1.1.1 攝像頭密度與人力的矛盾1…

    ansible playbook 實戰案例roles | 實現基于node_exporter的節點部署

    文章目錄一、核心功能描述二、roles內容2.1 文件結構2.2 主配置文件2.3 tasks文件內容2.4 vars文件內容免費個人運維知識庫&#xff0c;歡迎您的訂閱&#xff1a;literator_ray.flowus.cn 一、核心功能描述 這個 Ansible Role 的核心功能是&#xff1a;?自動化部署 Prometheu…