Filed under實戰開發指南on•3 分鐘閱讀

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

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

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


常見問題

  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,按副檔名篩選檔案並相應地進行複製。

返回所有文章首頁