Mike的Python學院

Python、Python 3

Mike Ku

Learn Code With Mike品牌創辦人

2022/01/27

Python常見的檔案處理應用

本文來分別介紹幾個Python常用的檔案操作方式:
1.檢查檔案是否存在
利用 Path 模組(Module)中的exists()方法,來檢查目錄下是否含有特定的檔案,如下範例:
from pathlib import Path
file = Path("blog/about.py")
print(file.exists()) #執行結果:True
2.取得檔案資訊
利用 Path 模組(Module)中的stat()方法即可取得目錄下特定檔案的資訊,如下範例:
from pathlib import Path
file = Path("blog/about.py")
print(file.stat())
從執行結果可以看到包含了檔案的大小 st_size、修改時間 st_mtime 及建立時間 st_ctime 等。
3.重新命名檔案
利用 Path 模組(Module)中的rename()方法,並且傳入新的檔案名稱及路徑即可實現檔案重新命名的動作,如下範例:
from pathlib import Path
file = Path("blog/about.py")
file.rename("blog/info.py")
4.寫入檔案資料
利用 Path 模組(Module)中的write_text()方法,並且傳入要寫入的資料。
from pathlib import Path
file = Path("blog/readme.txt")
file.write_text("blog package document.")
5.讀取檔案資料
利用 Path 模組(Module)中的read_text()方法,即可讀取指定目錄中的檔案內容。
from pathlib import Path
file = Path("blog/readme.txt")
print(file.read_text())
6.複製檔案
在一般的情況下,我們會利用 Path 模組(Module)中的read_text()方法讀取原檔案內容,接著,再透過write_text()方法將資料寫到新檔案中,來達到複製檔案的目的,如下範例:
from pathlib import Path
old_file = Path("blog/readme.txt")
new_file = Path() / "readme.txt"
new_file.write_text(old_file.read_text())
不過,有一個更簡潔的方式可以達到相同的效果,就是利用 shutil 模組(Module)中的copy()方法,傳入原檔案及新檔案物件,如下範例:
from pathlib import Path
import shutil
old_file = Path("blog/readme.txt")
new_file = Path() / "readme.txt"
shutil.copy(old_file, new_file)
7.開啟及關閉檔案
利用open()方法來開啟檔案,接著傳入路徑及模式,而模式分別有 r (讀)、w (覆寫)及 a(續寫)三種,此方法會回傳File Object。另外,關閉檔案則呼叫close()方法,如下範例:
file = open("blog/readme.txt", "r")
print(file.readline())
file.close()
各位可能會覺得奇怪,為什麼這邊讀取檔案內容是呼叫readline()方法而不是read_text()方法?其實,這兩個方法皆可進行讀取檔案內容的動作,只是上面範例是利用 Path 物件的read_text()方法,而這邊是 File 物件的readline()方法。
另外,使用此寫法有一個缺點是,當開啟檔案後,在進行任何動作的過程中,如果有發生例外錯誤時,即有機會沒有執行到關閉檔案的動作,這會使得資源耗盡或導致下次執行時發生錯誤,所以比較好的寫法是使用 with 陳述式( The With Statement),如下範例:
with open("blog/readme.txt", "r") as file:
print(file.readline())
透過with 陳述式(The With Statement),當區塊中的檔案操作結束時,Python會動呼叫close()方法來釋放外部資源。
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike(https://www.learncodewithmike.com/2020/02/python-files.html
)網站觀看更多精彩內容。
5 0 1847 2