Python的Shutil模块
Shuutil 模块提供对文件的高级操作,例如对文件的复制、创建和远程操作。它属于 Python 的标准实用程序模块。该模块有助于自动化复制和删除文件和目录的过程。在本文中,我们将学习这个模块。
复制文件到另一个目录
Python的shutil.copy()方法用于将源文件的内容复制到目标文件或目录。它还保留文件的权限模式,但不保留文件的其他元数据,如文件的创建和修改时间。
源必须代表一个文件,但目标可以是文件或目录。如果目标是目录,则文件将使用源中的基本文件名复制到目标中。此外,目的地必须是可写的。如果目标是一个文件并且已经存在,那么它将被源文件替换,否则将创建一个新文件。
Syntax: shutil.copy(source, destination, *, follow_symlinks = True)
Parameter:
- source: A string representing the path of the source file.
- destination: A string representing the path of the destination file or directory.
- follow_symlinks (optional) : The default value of this parameter is True. If it is False and source represents a symbolic link then destination will be created as a symbolic link.
Return Type: This method returns a string which represents the path of newly created file.
示例 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)
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)
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)
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)
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)
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)
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)
Python3
# importing shutil module
import shutil
# file search
cmd = 'anaconda'
# Using shutil.which() method
locate = shutil.which(cmd)
# Print result
print(locate)
输出:
Destination path: path/main2.py
示例 2:如果目标是目录。
蟒蛇3
# 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
将元数据与文件一起复制
Python的shutil.copy2()方法用于将源文件的内容复制到目标文件或目录。这种方法是相同的shutil.copy()方法,但它也试图保留文件的元数据。
Syntax: shutil.copy2(source, destination, *, follow_symlinks = True)
Parameter:
- source: A string representing the path of the source file.
- destination: A string representing the path of the destination file or directory.
- follow_symlinks (optional) : The default value of this parameter is True. If it is False and source represents a symbolic link then it attempts to copy all metadata from the source symbolic link to the newly-created destination symbolic link. This functionality is platform dependent.
Return Type: This method returns a string which represents the path of newly created file.
蟒蛇3
# 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:如果目标是目录
蟒蛇3
# 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 异常。
Syntax: shutil.copyfile(source, destination, *, follow_symlinks = True)
Parameter:
- source: A string representing the path of the source file.
- destination: A string representing the path of the destination file.
- follow_symlinks (optional) : The default value of this parameter is True. If False and source represents a symbolic link then a new symbolic link will be created instead of copying the file.
Return Type: This method returns a string which represents the path of newly created file.
蟒蛇3
# 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) 命名的目标目录必须不存在。它将在复制期间创建。
Syntax: shutil.copytree(src, dst, symlinks = False, ignore = None, copy_function = copy2, igonre_dangling_symlinks = False)
Parameters:
src: A string representing the path of the source directory.
dest: A string representing the path of the destination.
symlinks (optional) : This parameter accepts True or False, depending on which the metadata of the original links or linked links will be copied to the new tree.
ignore (optional) : If ignore is given, it must be a callable that will receive as its arguments the directory being visited by copytree(), and a list of its contents, as returned by os.listdir().
copy_function (optional): The default value of this parameter is copy2. We can use other copy function like copy() for this parameter.
igonre_dangling_symlinks (optional) : This parameter value when set to True is used to put a silence on the exception raised if the file pointed by the symlink doesn’t exist.
Return Value: This method returns a string which represents the path of newly created directory.
蟒蛇3
# 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()用于删除整个目录树,路径必须指向目录(但不是指向目录的符号链接)。
Syntax: shutil.rmtree(path, ignore_errors=False, onerror=None)
Parameters:
path: A path-like object representing a file path. A path-like object is either a string or bytes object representing a path.
ignore_errors: If ignore_errors is true, errors resulting from failed removals will be ignored.
oneerror: If ignore_errors is false or omitted, such errors are handled by calling a handler specified by onerror.
蟒蛇3
# 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()方法告诉可执行应用程序的路径,如果调用给定的cmd ,该应用程序将运行。此方法可用于在 PATH 中存在的计算机上查找文件。
Syntax: shutil.which(cmd, mode = os.F_OK | os.X_OK, path = None)
Parameters:
cmd: A string representing the file.
mode: This parameter specifies mode by which method should execute. os.F_OK tests existence of the path and os.X_OK Checks if path can be executed or we can say mode determines if the file exists and executable.
path: This parameter specifies the path to be used, if no path is specified then the results of os.environ() are used
Return Value: This method returns the path to an executable application
蟒蛇3
# 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