如何在 Python 中複製一個檔案

Azaz Farooq 2023年1月30日
  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 沒有 沒有 沒有

相關文章 - Python File