iT邦幫忙

0

Python模組: pathlib

  • 分享至 

  • xImage
  •  

pathlib 是 Python 標準庫中的一個模組,提供了一個面向對象的方式來處理文件系統路徑。
這個模組自 Python 3.4 開始引入,旨在簡化文件和目錄的操作,使其更加直觀和易於使用。
以下是 pathlib 模組的主要特點和功能介紹。

主要特點

跨平台支持: pathlib 可以自動根據操作系統選擇適當的路徑表示方式,例如在 Windows 上使用 WindowsPath,在 Unix/Linux 系統上使用 PosixPath。這意味著你不需要擔心不同操作系統之間的路徑分隔符問題。
面向對象: pathlib 將路徑表示為對象,這使得路徑操作更具可讀性和可維護性。你可以直接調用方法來進行各種操作,而不必使用函數式的 os.path 方法。
簡化的語法: 使用 / 運算符來合併路徑,使得代碼更簡潔。例如,Path('/home') / 'user' 會生成 /home/user 的路徑。

創建 Path 對象

from pathlib import Path
# 創建當前工作目錄的 Path 對象
current_path = Path('.')
#或是可以使用current_path = Path('')
print(current_path.resolve())  # 輸出當前工作目錄的絕對路徑

('.')(點): 在文件系統中,. 是一個特殊的符號,表示當前目錄。
這意味著如果你在某個目錄下運行 Python 程式,使用 Path('.') 創建的 Path 對象將指向該目錄。

在使用 Python 的 pathlib 模組時,
Path('.')Path('')都可以用來表示當前工作目錄,
但它們在某些情況下的行為和意圖有所不同。
Path('.')Path('') 的區別
Path('.'):
這表示當前工作目錄,通常用於明確指示你正在處於當前目錄下進行操作。
使用 '.' 是一種常見的做法,表示“這裡”或“當前位置”。

Path(''):
這通常表示一個空路徑,在某些上下文中,它可能會被解釋為根目錄或不明確的路徑。
在大多數操作中,使用 Path('') 可能會導致不明確的行為,特別是在需要明確指定當前目錄的情況下。

使用建議

使用 Path('.'): 如果你的意圖是明確地指向當前工作目錄,建議使用 Path('.')。這樣可以提高代碼的可讀性,讓其他開發者更容易理解你的意圖。
使用 Path(''): 雖然在某些情況下可以使用,但通常不推薦這樣做,因為它可能會導致混淆或不一致的行為。

檢查路徑屬性

path = Path('/tmp/myfile.txt')

# 檢查文件是否存在
print(path.exists())  # 輸出: True 或 False

# 檢查是否為文件
print(path.is_file())  # 輸出: True 或 False

# 檢查是否為目錄
print(path.is_dir())   # 輸出: True 或 False

讀取和寫入文件

# 寫入文本到文件
path.write_text('Hello, World!')

# 讀取文件內容
content = path.read_text()
print(content)  # 輸出: Hello, World!

遍歷目錄

# 列出目錄中的所有文件和子目錄
for item in Path('/tmp').iterdir():
    print(item)

路徑操作

# 合併路徑
new_path = Path('/home') / 'user' / 'documents'
print(new_path)  # 輸出: /home/user/documents

# 獲取文件名和擴展名
print(new_path.name)    # 獲取文件名
print(new_path.suffix)  # 獲取擴展名

動手練習1

from pathlib import Path
import json
current_path = Path('.')
digit_mapping ={ 1:'a', 2:'b', 3:'c', 4:'d', 5:'e'}
Path(current_path/'digit_mapping.json').write_text(json.dumps(digit_mapping))

代碼解析
1.current_path:
這是一個 Path 對象,代表當前工作目錄。通常是使用 Path('.') 或其他方式創建的。

2.current_path/'digit_mapping.json':
- 這部分使用了 / 運算符來合併路徑。這是 pathlib 模組的一個特性,它允許你以更直觀的方式構建文件路徑。
- 最終結果是一個新的 Path 對象,指向當前工作目錄下的 digit_mapping.json 文件。

3.json.dumps(digit_mapping):
- json.dumps() 是將 Python 對象(如字典、列表等)轉換為 JSON 格式字符串的方法。
- 在這裡,digit_mapping 可能是一個字典或其他可序列化的 Python 對象。這行代碼將其轉換為 JSON 字符串。

4.Path(...).write_text(...):
- write_text()pathlib.Path 對象的一個方法,用於將文本寫入指定的文件。
如果該文件digit_mapping.json不存在,則會自動創建它,然後將 digit_mapping字典寫入。
- 在這裡,它將前面生成的 JSON 字符串寫入到 digit_mapping.json 文件中。

動手練習2

在當前目錄下生成一個資料夾

from pathlib import Path
import json
current_path = Path('.')
digit_mapping ={ 1:'a', 2:'b', 3:'c', 4:'d', 5:'e'}
Path(current_path/'digit_mapping.json').write_text(json.dumps(digit_mapping))

out_dir = Path(current_path /'out')
out_dir.mkdir(exist_ok = True)
Path(out_dir/'digit_mapping.json').write_text(json.dumps(digit_mapping))

代碼解析
1.current_path/'out':
- 這行代碼的作用是創建一個新的 Path 對象out 子目錄,並指向當前工作目錄下的 out 子目錄。
- current_path 是一個 Path 對象,代表當前工作目錄。

2.out_dir = Path(current_path/'out'):
- 這行代碼將合併後的路徑賦值給變量 out_dir,使其成為一個指向當前工作目錄下的 out 目錄的 Path 對象。

3.out_dir.mkdir(exist_ok=True):
- mkdir()方法用於創建目錄。如果指定的目錄已經存在,且exist_ok=True,則不會引發錯誤。如果目錄不存在,則會創建它。
- 在這裡,因為設置了exist_ok=True,即使 out_dir已經存在,也不會引發FileExistsError
4.Path(out_dir/'digit_mapping.json'):
- 使用 / 運算符將 out_dir 路徑與文件名 'digit_mapping.json' 合併,生成一個新的 Path 對象,指向該子目錄中的 JSON 文件。
5.write_text(json.dumps(digit_mapping)):
- json.dumps(digit_mapping) 將 Python 對象(在此例中是名為 digit_mapping 的變量)轉換為 JSON 格式的字符串。
- 然後,使用 write_text() 方法將該 JSON 字符串寫入到指定的文件(即 digit_mapping.json)。如果該文件不存在,則會自動創建它。

總結

pathlib 模組提供了一種更現代化、更靈活的方式來處理文件系統路徑,適合用於各種文件和目錄操作。它的面向對象設計使得代碼更具可讀性,並且能夠輕鬆地處理不同操作系統之間的差異。如果你有更多問題或需要進一步了解 pathlib 的功能,隨時告訴我!


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言