[Python/shutil] 文件複製技巧:shutil.copy, shutil.copyfile, shutil.copy2, shutil.copyfileobj

Python 中的 shutil 庫提供了多種複製檔案和目錄的功能。在本篇文章中,我們將深入探討五種方法:shutil.copyshutil.copyfileshutil.copy2shutil.copyfileobj 以及 shutil.copytree。我們將透過實例檢視它們的差異並了解它們的應用。

shutil.copy

shutil.copy 函式允許我們將檔案的內容複製到另一個位置。以下是一個簡單的程式碼片段,示範了它的使用:

python
import shutil

source = 'source.txt'
destination = 'destination.txt'

shutil.copy(source, destination)

在這個例子中,source.txt 的內容被複製到 destination.txt。如果 destination.txt 不存在,將會被創建。

shutil.copyfile

shutil.copy 不同,shutil.copyfile 只複製檔案的內容,忽略任何元數據,如權限。以下是一個範例:

python
import shutil

source = 'source.txt'
destination = 'destination.txt'

shutil.copyfile(source, destination)

這段程式將會將 source.txt 的內容複製到 destination.txt,但不複製任何檔案的元數據。

shutil.copy2

shutil.copy2 函式的行為與 shutil.copy 類似,但它還保留了原始檔案的元數據,如時間戳記。以下是它的使用方法:

python
import shutil

source = 'source.txt'
destination = 'destination.txt'

shutil.copy2(source, destination)

source.txt 的內容和元數據將會被複製到 destination.txt

shutil.copyfileobj

shutil.copyfileobj 函式用於將檔案物件的內容複製到另一個檔案物件。以下是一個實際範例:

python
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 函式用於複製整個目錄結構。以下是一個範例:

python
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 函式庫提供多種複製檔案和目錄的函式。了解它們之間的差異可以確保有效的檔案管理。


常見問題

  1. shutil.copy 和 shutil.copy2 的主要區別是什麼? shutil.copy 複製內容和權限,而 shutil.copy2 也包括元數據,如時間戳記。
  2. shutil.copytree 能複製嵌套的目錄嗎? 是的,shutil.copytree 遞迴地複製整個目錄結構,包括所有嵌套的目錄和檔案。
  3. shutil 如何處理符號連結? 預設情況下,符號連結將被追蹤。在 shutil.copytree 中使用 symlinks=True 參數以保留符號連結。
  4. shutil.copyfileobj 能複製遠程檔案嗎? 它適用於檔案物件,因此如果遠程檔案可以在 Python 中表示為檔案物件,則可以進行複製。
  5. 是否可以使用 shutil 複製具有特定副檔名的檔案? 是的,您可以使用 Python 的 glob 模組和 shutil,按副檔名篩選檔案並相應地進行複製。
© Copyright 2023 CLONE CODING