当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。