Python 中的 shutil 庫提供了多種複製檔案和目錄的功能。在本篇文章中,我們將深入探討五種方法:shutil.copy、shutil.copyfile、shutil.copy2、shutil.copyfileobj 以及 shutil.copytree。我們將透過實例檢視它們的差異並了解它們的應用。
shutil.copy
shutil.copy 函式允許我們將檔案的內容複製到另一個位置。以下是一個簡單的程式碼片段,示範了它的使用:
import shutil
source = 'source.txt'
destination = 'destination.txt'
shutil.copy(source, destination)
在這個例子中,source.txt 的內容被複製到 destination.txt。如果 destination.txt 不存在,將會被創建。
shutil.copyfile
與 shutil.copy 不同,shutil.copyfile 只複製檔案的內容,忽略任何元數據,如權限。以下是一個範例:
import shutil
source = 'source.txt'
destination = 'destination.txt'
shutil.copyfile(source, destination)
這段程式將會將 source.txt 的內容複製到 destination.txt,但不複製任何檔案的元數據。
shutil.copy2
shutil.copy2 函式的行為與 shutil.copy 類似,但它還保留了原始檔案的元數據,如時間戳記。以下是它的使用方法:
import shutil
source = 'source.txt'
destination = 'destination.txt'
shutil.copy2(source, destination)
source.txt 的內容和元數據將會被複製到 destination.txt。
shutil.copyfileobj
shutil.copyfileobj 函式用於將檔案物件的內容複製到另一個檔案物件。以下是一個實際範例:
import shutil
with open('source.txt', 'rb') as src, open('destination.txt', 'wb') as dest:
shutil.copyfileobj(src, dest)
這段程式從 source.txt 讀取內容並寫入到 destination.txt。
shutil.copytree
shutil.copytree 函式用於複製整個目錄結構。以下是一個範例:
import shutil
source_dir = 'source_directory'
destination_dir = 'destination_directory'
shutil.copytree(source_dir, destination_dir)
這段程式將會將 source_directory 的全部內容複製到 destination_directory。
比較表格
| 函式 | 複製內容 | 複製權限 | 複製元數據 | 使用檔案物件 | 目標可能為目錄 |
|---|---|---|---|---|---|
| shutil.copy | 是 | 是 | 否 | 否 | 是 |
| shutil.copyfile | 是 | 否 | 否 | 否 | 否 |
| shutil.copy2 | 是 | 是 | 是 | 否 | 是 |
| shutil.copyfileobj | 是 | 否 | 否 | 是 | 否 |
| shutil.copytree | 是 | 是 | 是 | 否 | 是 |
Python 的 shutil 函式庫提供多種複製檔案和目錄的函式。了解它們之間的差異可以確保有效的檔案管理。
常見問題
shutil.copy 和 shutil.copy2 的主要區別是什麼?
shutil.copy複製內容和權限,而shutil.copy2也包括元數據,如時間戳記。shutil.copytree 能複製嵌套的目錄嗎? 是的,
shutil.copytree遞迴地複製整個目錄結構,包括所有嵌套的目錄和檔案。shutil 如何處理符號連結? 預設情況下,符號連結將被追蹤。在
shutil.copytree中使用symlinks=True參數以保留符號連結。shutil.copyfileobj 能複製遠程檔案嗎? 它適用於檔案物件,因此如果遠程檔案可以在 Python 中表示為檔案物件,則可以進行複製。
是否可以使用 shutil 複製具有特定副檔名的檔案? 是的,您可以使用 Python 的 glob 模組和 shutil,按副檔名篩選檔案並相應地進行複製。