Python中的文件操作和异常
生活随笔
收集整理的這篇文章主要介紹了
Python中的文件操作和异常
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Python中的文件操作和異常
文章目錄
- Python中的文件操作和異常
- 一、文件
- 01. 文件的概念
- 1.1 文件的概念和作用
- 1.2 文件的存儲方式
- 文本文件和二進制文件
- 02. 文件的基本操作
- 2.1 操作文件的套路
- 2.2 操作文件的函數/方法
- 2.3 read 方法 —— 讀取文件
- 文件指針
- 2.4 打開文件的方式
- 2.5 按行讀取文件內容
- `readline` 方法
- 2.6 文件讀寫案例 —— 復制文件
- 小文件復制
- 大文件復制
- 03. 文件/目錄的常用管理操作
- 文件操作
- 目錄操作
- 04. 文本文件的編碼格式
- 4.1 ASCII 編碼和 UNICODE 編碼
- `ASCII` 編碼
- `UTF-8` 編碼格式
- 4.2 Ptyhon 2.x 中如何使用中文
- unicode 字符串
- 二、異常
- 01. 異常的概念
- 02. 捕獲異常
- 2.1 簡單的捕獲異常語法
- 簡單異常捕獲演練 —— 要求用戶輸入整數
- 2.2 錯誤類型捕獲
- 異常類型捕獲演練 —— 要求用戶輸入整數
- 捕獲未知錯誤
- 2.3 異常捕獲完整語法
- 03. 異常的傳遞
- 04. 拋出 `raise` 異常
- 4.1 應用場景
- 4.2 拋出異常
一、文件
01. 文件的概念
1.1 文件的概念和作用
- 計算機的 文件,就是存儲在某種 長期儲存設備 上的一段 數據
- 長期存儲設備包括:硬盤、U 盤、移動硬盤、光盤…
文件的作用
將數據長期保存下來,在需要的時候使用
1.2 文件的存儲方式
- 在計算機中,文件是以 二進制 的方式保存在磁盤上的
文本文件和二進制文件
-
文本文件
- 可以使用 文本編輯軟件 查看
- 本質上還是二進制文件
- 例如:python 的源程序
-
二進制文件
- 保存的內容 不是給人直接閱讀的,而是 提供給其他軟件使用的
- 例如:圖片文件、音頻文件、視頻文件等等
- 二進制文件不能使用 文本編輯軟件 查看
02. 文件的基本操作
2.1 操作文件的套路
在 計算機 中要操作文件的套路非常固定,一共包含三個步驟:
- 讀 將文件內容讀入內存
- 寫 將內存內容寫入文件
2.2 操作文件的函數/方法
- 在 Python 中要操作文件需要記住 1 個函數和 3 個方法
| 01 | open | 打開文件,并且返回文件操作對象 |
| 02 | read | 將文件內容讀取到內存 |
| 03 | write | 將指定內容寫入文件 |
| 04 | close | 關閉文件 |
- open 函數負責打開文件,并且返回文件對象
- read/write/close 三個方法都需要通過 文件對象 來調用
2.3 read 方法 —— 讀取文件
- open 函數的第一個參數是要打開的文件名(文件名區分大小寫)
- 如果文件 存在,返回 文件操作對象
- 如果文件 不存在,會 拋出異常
- read 方法可以一次性 讀入 并 返回 文件的 所有內容
- close 方法負責 關閉文件
- 如果 忘記關閉文件,會造成系統資源消耗,而且會影響到后續對文件的訪問
- 注意:read 方法執行后,會把 文件指針 移動到 文件的末尾
提示
- 在開發中,通常會先編寫 打開 和 關閉 的代碼,再編寫中間針對文件的 讀/寫 操作!
文件指針
- 文件指針 標記 從哪個位置開始讀取數據
- 第一次打開 文件時,通常 文件指針會指向文件的開始位置
- 當執行了 read 方法后,文件指針 會移動到 讀取內容的末尾
- 默認情況下會移動到 文件末尾
思考
- 如果執行了一次 read 方法,讀取了所有內容,那么再次調用 read 方法,還能夠獲得到內容嗎?
答案
- 不能
- 第一次讀取之后,文件指針移動到了文件末尾,再次調用不會讀取到任何的內容
2.4 打開文件的方式
- open 函數默認以 只讀方式 打開文件,并且返回文件對象
語法如下:
f = open("文件名", "訪問方式")| r | 以只讀方式打開文件。文件的指針將會放在文件的開頭,這是默認模式。如果文件不存在,拋出異常 |
| w | 以只寫方式打開文件。如果文件存在會被覆蓋。如果文件不存在,創建新文件 |
| a | 以追加方式打開文件。如果該文件已存在,文件指針將會放在文件的結尾。如果文件不存在,創建新文件進行寫入 |
| r+ | 以讀寫方式打開文件。文件的指針將會放在文件的開頭。如果文件不存在,拋出異常 |
| w+ | 以讀寫方式打開文件。如果文件存在會被覆蓋。如果文件不存在,創建新文件 |
| a+ | 以讀寫方式打開文件。如果該文件已存在,文件指針將會放在文件的結尾。如果文件不存在,創建新文件進行寫入 |
提示
- 頻繁的移動文件指針,會影響文件的讀寫效率,開發中更多的時候會以 只讀、只寫 的方式來操作文件
寫入文件示例
# 打開文件 f = open("README", "w")f.write("hello python!\n") f.write("今天天氣真好")# 關閉文件 f.close()2.5 按行讀取文件內容
- read 方法默認會把文件的 所有內容 一次性讀取到內存
- 如果文件太大,對內存的占用會非常嚴重
readline 方法
- readline 方法可以一次讀取一行內容
- 方法執行后,會把 文件指針 移動到下一行,準備再次讀取
讀取大文件的正確姿勢
# 打開文件 file = open("README")while True:# 讀取一行內容text = file.readline()# 判斷是否讀到內容if not text:break# 每讀取一行的末尾已經有了一個 `\n`print(text, end="")# 關閉文件 file.close()2.6 文件讀寫案例 —— 復制文件
小文件復制
- 打開一個已有文件,讀取完整內容,并寫入到另外一個文件
大文件復制
- 打開一個已有文件,逐行讀取內容,并順序寫入到另外一個文件
03. 文件/目錄的常用管理操作
- 在 終端 / 文件瀏覽器、 中可以執行常規的 文件 / 目錄 管理操作,例如:
- 創建、重命名、刪除、改變路徑、查看目錄內容、……
- 在 Python 中,如果希望通過程序實現上述功能,需要導入 os 模塊
文件操作
| 01 | rename | 重命名文件 | os.rename(源文件名, 目標文件名) |
| 02 | remove | 刪除文件 | os.remove(文件名) |
目錄操作
| 01 | listdir | 目錄列表 | os.listdir(目錄名) |
| 02 | mkdir | 創建目錄 | os.mkdir(目錄名) |
| 03 | rmdir | 刪除目錄 | os.rmdir(目錄名) |
| 04 | getcwd | 獲取當前目錄 | os.getcwd() |
| 05 | chdir | 修改工作目錄 | os.chdir(目標目錄) |
| 06 | path.isdir | 判斷是否是文件 | os.path.isdir(文件路徑) |
提示:文件或者目錄操作都支持 相對路徑 和 絕對路徑
04. 文本文件的編碼格式
- 文本文件存儲的內容是基于 字符編碼 的文件,常見的編碼有 ASCII 編碼,UNICODE 編碼等
Python 2.x 默認使用 ASCII 編碼格式
Python 3.x 默認使用 UTF-8 編碼格式
4.1 ASCII 編碼和 UNICODE 編碼
ASCII 編碼
- 計算機中只有 256 個 ASCII 字符
- 一個 ASCII 在內存中占用 1 個字節 的空間
- 8 個 0/1 的排列組合方式一共有 256 種,也就是 2 ** 8
UTF-8 編碼格式
- 計算機中使用 1~6 個字節 來表示一個 UTF-8 字符,涵蓋了 地球上幾乎所有地區的文字
- 大多數漢字會使用 3 個字節 表示
- UTF-8 是 UNICODE 編碼的一種編碼格式
4.2 Ptyhon 2.x 中如何使用中文
Python 2.x 默認使用 ASCII 編碼格式
Python 3.x 默認使用 UTF-8 編碼格式
- 在 Python 2.x 文件的 第一行 增加以下代碼,解釋器會以 utf-8 編碼來處理 python 文件
這方式是官方推薦使用的!
- 也可以使用
unicode 字符串
- 在 Python 2.x 中,即使指定了文件使用 UTF-8 的編碼格式,但是在遍歷字符串時,仍然會 以字節為單位遍歷 字符串
- 要能夠 正確的遍歷字符串,在定義字符串時,需要 在字符串的引號前,增加一個小寫字母 u,告訴解釋器這是一個 unicode 字符串(使用 UTF-8 編碼格式的字符串)
二、異常
01. 異常的概念
- 程序在運行時,如果 Python 解釋器 遇到 到一個錯誤,會停止程序的執行,并且提示一些錯誤信息,這就是 異常
- 程序停止執行并且提示錯誤信息 這個動作,我們通常稱之為:拋出(raise)異常
程序開發時,很難將 所有的特殊情況 都處理的面面俱到,通過 異常捕獲 可以針對突發事件做集中的處理,從而保證程序的 穩定性和健壯性
02. 捕獲異常
2.1 簡單的捕獲異常語法
- 在程序開發中,如果 對某些代碼的執行不能確定是否正確,可以增加 try(嘗試) 來 捕獲異常
- 捕獲異常最簡單的語法格式:
- try 嘗試,下方編寫要嘗試代碼,不確定是否能夠正常執行的代碼
- except 如果不是,下方編寫嘗試失敗的代碼
簡單異常捕獲演練 —— 要求用戶輸入整數
try:# 提示用戶輸入一個數字num = int(input("請輸入數字:")) except:print("請輸入正確的數字")2.2 錯誤類型捕獲
-
在程序執行時,可能會遇到 不同類型的異常,并且需要 針對不同類型的異常,做出不同的響應,這個時候,就需要捕獲錯誤類型了
-
語法如下:
- 當 Python 解釋器 拋出異常 時,最后一行錯誤信息的第一個單詞,就是錯誤類型
異常類型捕獲演練 —— 要求用戶輸入整數
需求
捕獲未知錯誤
- 在開發時,要預判到所有可能出現的錯誤,還是有一定難度的
- 如果希望程序 無論出現任何錯誤,都不會因為 Python 解釋器 拋出異常而被終止,可以再增加一個 except
語法如下:
except Exception as result:print("未知錯誤 %s" % result)2.3 異常捕獲完整語法
- 在實際開發中,為了能夠處理復雜的異常情況,完整的異常語法如下:
提示:
- 有關完整語法的應用場景,在后續學習中,結合實際的案例會更好理解
- 現在先對這個語法結構有個印象即可
-
else 只有在沒有異常時才會執行的代碼
-
finally 無論是否有異常,都會執行的代碼
-
之前一個演練的 完整捕獲異常 的代碼如下:
03. 異常的傳遞
- 異常的傳遞 —— 當 函數/方法 執行 出現異常,會 將異常傳遞 給 函數/方法 的 調用一方
- 如果 傳遞到主程序,仍然 沒有異常處理,程序才會被終止
提示
- 在開發中,可以在主函數中增加 異常捕獲
- 而在主函數中調用的其他函數,只要出現異常,都會傳遞到主函數的 異常捕獲 中
- 這樣就不需要在代碼中,增加大量的 異常捕獲,能夠保證代碼的整潔
需求
04. 拋出 raise 異常
4.1 應用場景
- 在開發中,除了 代碼執行出錯 Python 解釋器會 拋出 異常之外
- 還可以根據 應用程序 特有的業務需求 主動拋出異常
示例
- 提示用戶 輸入密碼,如果 長度少于 8,拋出 異常
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-U9fzCe6Z-1588588881345)(media/15016413521006/024_%E8%87%AA%E5%AE%9A%E4%B9%89%E5%BC%82%E5%B8%B8.png)]
注意
- 當前函數 只負責 提示用戶輸入密碼,如果 密碼長度不正確,需要其他的函數進行額外處理
- 因此可以 拋出異常,由其他需要處理的函數 捕獲異常
4.2 拋出異常
- Python 中提供了一個 Exception 異常類
- 在開發時,如果滿足 特定業務需求時,希望 拋出異常,可以:
- 創建 一個 Exception 的 對象
- 使用 raise 關鍵字 拋出 異常對象
需求
- 定義 input_password 函數,提示用戶輸入密碼
- 如果用戶輸入長度 < 8,拋出異常
- 如果用戶輸入長度 >=8,返回輸入的密碼
總結
以上是生活随笔為你收集整理的Python中的文件操作和异常的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python的继承多态
- 下一篇: 字节跳动---毕业旅行问题