pathlib 模塊的目的是用面向對象(object-oriented)的 API 替換字符串的操作來解析、創建文件和目錄。
Python 是跨平臺的,模塊 pathlib 包括一些類來處理 POSIX 或者 Windows 語法的文件系統的路徑。它也包含一些特殊的類只操作字符串而不接觸具體的操作系統,如:PurePosixPath 和 PureWindowsPath 。
為了正確的工作在真實的操作系統上,可以直接使用 Path 類。它會根據當前的操作系統來確定是否用 PosixPath 或者 WindowsPath。
創建路徑
要創建一個路徑對象 Path,第一個參數傳入一個字符串,表示路徑的名稱。如果想要根據當前路徑來創建一個新路徑,可以使用 / 操作符,參數可以是一個字符串或者路徑對象。
執行:
本例中,創建了3個路徑對象,最後打印了生成的對象類型。其中創建 root 路徑時,使用了上級的目錄引用 ..。
resolve() 方法會按照文件系統,返回絕對路徑。軟連接會返回它指向的真實路徑。
執行:
joinpath() 方法根據多個路徑片段創建路徑。
執行:
給出一個路徑對象,然後希望獲取當前路徑下另一個文件對象或者不同擴展名的對象,可以使用 with_name() 和 with_suffix() 方法。
執行:
解析路徑
Path 對象有很多方法和屬性可以從路徑獲取部分值。例如 parts 屬性根據路徑分隔符分隔開返回一個序列。
執行:
屬性 parent 返回一個路徑的父級路徑,相當於調用 os.path.dirname()。屬性 parents 返回上級目錄的迭代器,直到根目錄。
執行:
還存在其他的屬性返回路徑的一些部分。屬性 name 返回最後的路徑分隔符之後的內容,suffix 返回擴展名,stem 返回擴展名之前的名稱。
執行:
便利方法
home() 方法返回當前用戶主目錄,cwd() 方法返回當前目錄。
目錄內容
有 3 個方法可以獲取文件系統的內容,iterdir() 返回一個生成器(generator),每次從當前目錄返回一項。
執行:
glob() 方法只返回匹配了一定模式(pattern)的文件名:
執行:
rglob() 可以遞歸的訪問子目錄。
執行:
讀取和寫入文件
每個路徑 Path 的實例都包含操作文件的方法。使用 read_bytes() 和 read_text() 方法立刻讀取文件的內容。方法 write_bytes() 和 write_text() 寫入文件。 open() 方法打開文件獲取文件對象。
執行:
目錄和軟連接
mkdir() 方法可以創建目錄。
執行:
使用 symlink_to() 方法創建軟鏈接,鏈接名稱是傳給路徑的值,symlink_to()的參數是指向的文件。
執行:
這個例子創建了一個軟鏈接,最後使用 resolve() 方法打印了真實的文件名稱。
文件類型
Path 路徑實例包含多個方法測試文件的類型。
- is_file() 判斷是否是文件
- is_dir() 判斷是否是目錄
- is_symlink() 判斷是否是軟鏈接
- is_fifo() 判斷是否是 FIFO 隊列
- is_block_device() 判斷是否是塊設備
- is_char_device() 判斷是否是字符設備
文件屬性
訪問文件的詳細信息可以使用 stat() 或者 lstat() 方法,lstat() 用於軟鏈接。這些方法返回的信息是和 os.stat() 和 os.lstat() 一致的。
執行:
owner() 和 group() 方法直接返回文件的所有者和分組。
執行:
touch() 方法類似 unix 的命令 touch,創建一個文件或者更新文件的修改日期。
權限
chmod() 方法更改一個文件的權限,傳遞一個整數值。這個整數值可以使用模塊 stat 創建。
執行:
刪除
rmdir() 方法刪除一個空目錄。
執行:
如果目錄不存在,會觸發異常 FileNotFoundError。如果目錄非空,則觸發 OSError 錯誤,提示目錄不是空的。
對於文件,軟鏈接,或者其他的文件類型,使用 unlink() 方法。
執行:
閱讀更多 趣喜歡編程 的文章