當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python Shutil用法及代碼示例


Shutil 模塊提供對文件的高級操作,如文件的複製、創建和遠程操作。它屬於 Python 的標準實用程序模塊。該模塊有助於自動執行文件和目錄的複製和刪除過程。在這篇文章中,我們將學習這個模塊。

將文件複製到另一個目錄

shutil.copy()Python中的方法用於將源文件的內容複製到目標文件或目錄。它還保留文件的權限模式,但不保留文件的其他元數據,例如文件的創建和修改時間。
源必須代表一個文件,但目標可以是文件或目錄。如果目標是目錄,則文件將使用源中的基本文件名複製到目標中。此外,目的地必須是可寫的。如果目標是一個文件並且已經存在,那麽它將被源文件替換,否則將創建一個新文件。

用法:shutil.copy(source, destination, *, follow_symlinks = True)

參數:

  • source:表示源文件路徑的字符串。
  • 目標:表示目標文件或目錄的路徑的字符串。
  • follow_symlinks(可選):該參數的默認值為True。如果為 False 並且源表示符號鏈接,則目標將被創建為符號鏈接。

返回類型:此方法返回一個字符串,表示新創建的文件的路徑。

示例 1:

Python3


# Python program to explain shutil.copy() method 
# importing shutil module 
import shutil 
source = "path/main.py"
destination ="path/main2.py"
# Copy the content of 
# source to destination 
dest = shutil.copy(source, destination) 
# Print path of newly 
# created file 
print("Destination path:", dest) 

輸出:

Destination path: path/main2.py

示例 2:如果目標是目錄。

Python3


# importing shutil module  
import shutil 
   
# Source path 
source = "path/main.py"
   
# Destination path 
destination = "path/gfg/"
   
# Copy the content of 
# source to destination 
dest = shutil.copy(source, destination) 
   
# Print path of newly  
# created file 
print("Destination path:", dest) 

輸出:

path/gfg/main.py

將元數據與文件一起複製

shutil.copy2()Python中的方法用於將源文件的內容複製到目標文件或目錄。該方法等同於關閉.copy()方法,但它也嘗試保留文件的元數據。

用法:shutil.copy2(source, destination, *, follow_symlinks = True)

參數:

  • source:表示源文件路徑的字符串。
  • destination: 表示目標文件或目錄的路徑的字符串。
  • follow_symlinks(可選):該參數的默認值為 True。如果為 False 並且 source 表示符號鏈接,則它會嘗試將所有元數據從源符號鏈接複製到新創建的目標符號鏈接。此函數取決於平台。

Return Type: 此方法返回一個字符串,表示新創建的文件的路徑。

Python3


# Python program to explain shutil.copy2() method 
     
# importing os module 
import os 
# importing shutil module 
import shutil 
# path 
path = 'csv/'
# List files and directories 
# in '/home/User/Documents' 
print("Before copying file:") 
print(os.listdir(path)) 
# Source path 
source = "csv/main.py"
# Print the metadeta 
# of source file 
metadata = os.stat(source) 
print("Metadata:", metadata, "\n") 
# Destination path 
destination = "csv/gfg/check.txt"
# Copy the content of 
# source to destination 
dest = shutil.copy2(source, destination) 
# List files and directories 
# in "/home / User / Documents" 
print("After copying file:") 
print(os.listdir(path)) 
# Print the metadata 
# of the destination file 
matadata = os.stat(destination) 
print("Metadata:", metadata) 
# Print path of newly 
# created file 
print("Destination path:", dest) 

輸出:

Before copying file:

[‘archive (2)’, ‘c.jpg’, ‘c.PNG’, ‘Capture.PNG’, ‘cc.jpg’, ‘check.zip’, ‘cv.csv’, ‘d.png’, ‘Done! Terms And Conditions Generator - The Fastest Free Terms and Conditions Generator!.pdf’, ‘file1.csv’, ‘gfg’, ‘haarcascade_frontalface_alt2.xml’, ‘log_transformed.jpg’, ‘main.py’, ‘nba.csv’, ‘new_gfg.png’, ‘r.gif’, ‘Result -_ Terms and Conditions are Ready!.pdf’, ‘rockyou.txt’, ‘sample.txt’]

Metadata: os.stat_result(st_mode=33206, st_ino=2251799814202896, st_dev=1689971230, st_nlink=1, st_uid=0, st_gid=0, st_size=1916, st_atime=1612953710, st_mtime=1612613202, st_ctime=1612522940) 

After copying file:

[‘archive (2)’, ‘c.jpg’, ‘c.PNG’, ‘Capture.PNG’, ‘cc.jpg’, ‘check.zip’, ‘cv.csv’, ‘d.png’, ‘Done! Terms And Conditions Generator - The Fastest Free Terms and Conditions Generator!.pdf’, ‘file1.csv’, ‘gfg’, ‘haarcascade_frontalface_alt2.xml’, ‘log_transformed.jpg’, ‘main.py’, ‘nba.csv’, ‘new_gfg.png’, ‘r.gif’, ‘Result -_ Terms and Conditions are Ready!.pdf’, ‘rockyou.txt’, ‘sample.txt’]

Metadata: os.stat_result(st_mode=33206, st_ino=2251799814202896, st_dev=1689971230, st_nlink=1, st_uid=0, st_gid=0, st_size=1916, st_atime=1612953710, st_mtime=1612613202, st_ctime=1612522940)

Destination path: csv/gfg/check.txt

示例 2:如果目標是目錄

Python3


# Python program to explain shutil.copy2() method 
# importing os module 
import os 
# importing shutil module 
import shutil 
# Source path 
source = "csv/main.py"
# Destination path 
destination = "csv/gfg/"
# Copy the content of 
# source to destination 
dest = shutil.copy2(source, destination) 
# List files and directories 
# in "/home / User / Desktop" 
print("After copying file:") 
print(os.listdir(destination)) 
# Print path of newly 
# created file 
print("Destination path:", dest) 

輸出:

After copying file:

[‘cc.jpg’, ‘check.txt’, ‘log_transformed.jpg’, ‘main.py’, ‘main2.py’]

Destination path: csv/gfg/main.py

將一個文件的內容複製到另一個文件

Python中的shutil.copyfile()方法用於將源文件的內容複製到目標文件。不複製文件的元數據。源和目標必須代表一個文件,並且目標必須可寫。如果目標已經存在,則它將被源文件替換,否則將創建一個新文件。

如果源和目標表示同一文件,則將引發 SameFileError 異常。

用法: shutil.copyfile(source, destination, *, follow_symlinks = True)

參數:

  • source:表示源文件路徑的字符串。
  • destination: 表示目標文件路徑的字符串。
  • follow_symlinks(可選):該參數的默認值為 True。如果為 False 並且 source 表示符號鏈接,則將創建一個新的符號鏈接而不是複製文件。

返回類型:此方法返回一個字符串,表示新創建的文件的路徑。

Python3


# Python program to explain shutil.copyfile() method 
# importing shutil module 
import shutil 
# Source path 
source = "csv/main.py"
# Destination path 
destination = "csv/gfg/main_2.py"
dest = shutil.copyfile(source, destination) 
print("Destination path:", dest) 

輸出:

Destination path: csv/gfg/main_2.py

複製完整目錄

shutil.copytree() 方法遞歸地將以源 (src) 為根的整個目錄樹複製到目標目錄。由 (dst) 命名的目標目錄必須不存在。它將在複製過程中創建。

用法: shutil.copytree(src, dst, symlinks = False, ignore = None, copy_function = copy2, ignore_dangling_symlinks = False)

參數:
src:表示源目錄路徑的字符串。
dest:表示目的地路徑的字符串。
symlinks (optional) :此參數接受 True 或 False,具體取決於原始鏈接或鏈接鏈接的元數據將複製到新樹。
ignore (optional) :如果給出了ignore,它必須是一個可調用的,它將接收copytree()正在訪問的目錄及其內容列表作為其參數,由os.listdir()返回。
copy_function(可選):該參數的默認值為copy2。我們可以使用其他複製函數,例如copy()來複製該參數。
ignore_dangling_symlinks(可選):當設置為 True 時,此參數值用於在符號鏈接指向的文件不存在時對引發的異常進行靜默。

返回值:此方法返回一個字符串,表示新創建的目錄的路徑。

Python3


# Python program to explain shutil.copytree() method 
# importing os module 
import os 
# importing shutil module 
import shutil 
# path 
path = 'C:/Users/ksaty/csv/gfg'
print("Before copying file:") 
print(os.listdir(path)) 
# Source path 
src = 'C:/Users/ksaty/csv/gfg'
# Destination path 
dest = 'C:/Users/ksaty/csv/gfg/dest'
# Copy the content of 
# source to destination 
destination = shutil.copytree(src, dest) 
print("After copying file:") 
print(os.listdir(path)) 
# Print path of newly 
# created file 
print("Destination path:", destination) 

輸出:

Before copying file:

[‘cc.jpg’, ‘check.txt’, ‘log_transformed.jpg’, ‘main.py’, ‘main2.py’, ‘main_2.py’]

After copying file:

[‘cc.jpg’, ‘check.txt’, ‘dest’, ‘log_transformed.jpg’, ‘main.py’, ‘main2.py’, ‘main_2.py’]

Destination path: C:/Users/ksaty/csv/gfg/dest

刪除目錄

shutil.rmtree()用於刪除整個目錄樹,路徑必須指向目錄(但不是指向目錄的符號鏈接)。

用法: shutil.rmtree(path, ignore_errors=False, onerror=None)

參數:
path: 代表文件路徑的 path-like 對象。 path-like 對象是表示路徑的字符串或字節對象。
ignore_errors:如果 ignore_errors 為 true,則刪除失敗導致的錯誤將被忽略。
oneerror:如果 ignore_errors 為 false 或被省略,則通過調用 onerror 指定的處理程序來處理此類錯誤。

Python3


# Python program to demonstrate 
# shutil.rmtree() 
import shutil 
import os 
# location 
location = "csv/gfg/"
# directory 
dir = "dest"
# path 
path = os.path.join(location, dir) 
# removing directory 
shutil.rmtree(path) 

查找文件

shutil.which()方法告訴可執行應用程序的路徑,如果給定的話,該應用程序將運行指令被稱為。此方法可用於查找計算機上 PATH 中存在的文件。

用法: shutil.which(cmd, mode = os.F_OK | os.X_OK, path = None)

參數:
cmd: 代表文件的字符串。
mode: 此參數指定方法應執行的模式。操作係統F_OK測試路徑的存在性和操作係統.X_OK檢查路徑是否可以執行,或者我們可以說模式確定文件是否存在且可執行。
path: 該參數指定要使用的路徑,如果未指定路徑則使用 os.environ() 的結果
返回值:此方法返回可執行應用程序的路徑

Python3


# importing shutil module  
import shutil  
   
# file search  
cmd = 'anaconda'
   
# Using shutil.which() method 
locate = shutil.which(cmd) 
   
# Print result 
print(locate)

輸出:

D:\Installation_bulk\Scripts\anaconda.EXE


相關用法


注:本文由純淨天空篩選整理自kumar_satyam大神的英文原創作品 Shutil Module in Python。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。