如何在 Python 中複製一個檔案

Azaz Farooq 2023年1月30日 Python Python File
  1. 在 Python 中 Shutil copyfile() 複製檔案的方法
  2. Shutil copy() 方法複製有許可權的檔案
  3. copy()copyfile() 方法的比較:
  4. copyfileobj() 複製檔案物件的方法
  5. copy2() 儲存後設資料的方法
如何在 Python 中複製一個檔案

Python 有幾個現成的模組來支援檔案 I/O 操作 (如 OS、subprocess 和 shutil)。你將簡單地使用 shutil 模組複製檔案和目錄。複製、轉移或刪除檔案和目錄等操作都是使用這個實用功能完成的。這裡討論四種方法如下。

在 Python 中 Shutil copyfile() 複製檔案的方法

它將源材料複製到一個目標檔案中。如果目標檔案不可寫,在複製過程中會出現 IOError 異常。如果原始檔和目標檔案相同,則返回 SameFileError。原始檔和目標檔案的路徑名以字串形式提供。

copyfile(source_file, destination_file)

本方法不支援字元或塊裝置和管道。

import shutil

source = r"C:\Users\DelftStack\Documents\test\test.txt"
destination = r"C:\Users\DelftStack\Pictures\test2\test2.txt"
shutil.copyfile(source, destination)

Shutil copy() 方法複製有許可權的檔案

copy() 方法的工作原理與 Unix 命令 cp 類似。在複製其內容時,這個方法會同步目標檔案和原始檔的許可權。如果你複製的是同一個檔案,它還會丟擲 SameFileError。它的語法如下。

shutil.copy(src_file, dest_file, *, follow_symlinks=True)

Shutil copy() 方法複製檔案許可權的例子

import shutil

src = r"C:\Users\DelftStack\Documents\test\test.txt"
des = r"C:\Users\DelftStack\Pictures\test2\test2.txt"
shutil.copy(src, des)

copy()copyfile() 方法的比較:

  1. copy() 方法在複製內容時往往設定檔案許可權,而 copyfile() 只複製資料。
  2. 本質上,在實現中,copyfile() 方法使用了 copyfileobj() 方法。相比之下,copy() 方法使用了 copyfile()copymode() 兩個函式。
  3. 通過以上一點可以看出,copyfile() 會比 copy() 快一點,因為後者有一個額外的工作(保留許可權)。

copyfileobj() 複製檔案物件的方法

該函式將檔案複製到目標路徑或檔案的物件上。如果目標物件是檔案物件,則需要直接呼叫 copyfileobj() 後關閉。緩衝區大小用於指定緩衝區的長度。它是指在複製的過程中,記憶體中保留的位元組數。

copyfileobj() 方法的語法如下。

shutil.copyfileobj(src_file_object, dest_file_object[, length])
import shutil

filename1 = r"C:\Users\DelftStack\Documents\test\test.txt"
fileA = open(filename1, "rb")
filename2 = r"C:\Users\DelftStack\Pictures\test2\test2.txt"
fileB = open(filename2, "wb")
shutil.copyfileobj(fileA, fileB)

copy2() 儲存後設資料的方法

copy2() 方法與 copy() 方法類似,但除了複製檔案內容外,它還保留了原始檔的所有後設資料。

shutil.copy2(src_file, dest_file, *, follow_symlinks=True)

import shutil

src = r"C:\Users\DelftStack\Documents\test\test.txt"
des = r"C:\Users\DelftStack\Pictures\test2\test2.txt"
shutil.copy2(src, des)

在 Python 中複製檔案的方法結論

最後,附上一個表格,介紹所有的方法,以幫助更好地理解 shutil 工具。

函式 複製後設資料 複製許可權 可以使用緩衝器 目的地可以是目錄
shutil.copy 沒有 沒有
shutil.copyfile 沒有 沒有 沒有 沒有
shutil.copy2 沒有 是的,是的
shutil.copyfileobj 沒有 沒有 沒有
Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe

相關文章 - Python File