目錄
一、文件的基本概念
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 程序。