文章目录
- shutil.copyfileobj(fsrc, fdst[, length])
- shutil.copyfile(src, dst, *, follow_symlinks=True)
- shutil.copymode(src, dst, *, follow_symlinks=True)
- shutil.copystat(src, dst, *, follow_symlinks=True)
- shutil.copy(src, dst, *, follow_symlinks=True)
- shutil.copy2(src, dst, *, follow_symlinks=True)
- shutil.ignore_patterns(*patterns)
- shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False, dirs_exist_ok=False)
- shutil.rmtree(path, ignore_errors=False, οnerrοr=None, *, onexc=None, dir_fd=None)
- shutil.move(src, dst, copy_function=copy2)
- shutil.disk_usage(path)
- shutil.chown(path, user=None, group=None)
- shutil.which(cmd, mode=os.F_OK | os.X_OK, path=None)
shutil.copyfileobj(fsrc, fdst[, length])
Python 的 shutil 模块中的一个函数,用于从一个文件对象(fsrc)复制内容到另一个文件对象(fdst)。这里,fsrc 和 fdst 都是打开的文件对象,例如通过 open() 函数打开的文件。
参数说明:
- fsrc:源文件对象,即要从中读取数据的文件对象。
- fdst:目标文件对象,即要将数据写入其中的文件对象。
- length:可选参数,指定一次读取和写入操作中的字节数。如果未指定,则使用默认缓冲区大小。
这个函数通常用于在文件之间进行低级别的数据复制,尤其是在源和目标文件可能以不同的方式打开(例如,一个以二进制模式打开,另一个以文本模式打开)时。
import shutil
import os
with open('source.txt', 'rb') as src, open('destination.txt', 'wb') as dst:
shutil.copyfileobj(src, dst)
shutil.copyfile(src, dst, *, follow_symlinks=True)
ython 的 shutil 模块中的一个函数,用于复制文件。这个函数会创建一个名为 dst 的新文件,其内容与 src 文件完全相同。
参数说明:
- src:源文件路径,即要复制的文件的路径。
- dst:目标文件路径,即要创建的新文件的路径。
- follow_symlinks:可选参数,默认为 True。如果为 True,则如果 src 是一个符号链接,将复制链接指向的文件的内容,而不是链接本身。如果为 False,则复制符号链接本身,而不是它指向的文件。
import shutil
shutil.copyfile('source.txt', 'destination.txt')
shutil.copymode(src, dst, *, follow_symlinks=True)
Python 的 shutil 模块中的一个函数,用于复制文件或目录的权限位(权限模式)。这个函数不会复制文件内容,仅复制文件的权限设置。
参数说明:
- src:源文件或目录的路径。
- dst:目标文件或目录的路径。
- follow_symlinks:可选参数,默认为 True。如果为 True,并且 src 是一个符号链接,则复制链接指向的文件或目录的权限位。如果为 False,则复制符号链接本身的权限位。
使用 shutil.copymode 时,你需要确保源文件或目录存在,并且目标文件或目录也已经存在,因为此函数仅修改目标文件或目录的权限位,不会创建新文件或目录。
import shutil
import os
# 设置源文件权限
os.chmod('source.txt', 0o755)
# 复制权限模式
shutil.copymode('source.txt', 'destination.txt')
shutil.copystat(src, dst, *, follow_symlinks=True)
Python 的 shutil 模块中的一个函数,用于复制文件的状态信息(stat information),如权限位、时间戳等,从源文件或目录到目标文件或目录。这个函数不会复制文件内容,只是复制文件的元数据。
参数说明:
- src:源文件或目录的路径。
- dst:目标文件或目录的路径。
- follow_symlinks:可选参数,默认为 True。如果为 True,并且 src 是一个符号链接,则复制链接指向的文件或目录的状态信息。如果为 False,则复制符号链接本身的状态信息。
与 shutil.copymode 不同,shutil.copystat 复制的是更全面的文件状态信息,包括访问时间、修改时间、状态改变时间以及可能的其他平台特定的元数据。
import shutil
import os
# 复制状态信息(不包括内容)
shutil.copystat('source.txt', 'destination.txt')
shutil.copy(src, dst, *, follow_symlinks=True)
Python 的 shutil 模块中的一个函数,用于复制文件的内容和元数据(如权限位和时间戳)从一个位置到另一个位置。这个函数基本上会创建一个新的文件,其内容、权限位和时间戳都与源文件相同。
参数说明:
- src:源文件路径,即要复制的文件的路径。
- dst:目标文件路径,即要创建的新文件的路径。
- follow_symlinks:可选参数,默认为 True。如果为 True,并且 src 是一个符号链接,则复制链接指向的文件的内容,而不是链接本身。如果为 False,则复制符号链接本身,而不是它指向的文件。
使用 shutil.copy 时,如果目标文件 dst 已经存在,它会被覆盖。
import shutil
shutil.copy('source.txt', 'destination.txt')
shutil.copy2(src, dst, *, follow_symlinks=True)
Python 的 shutil 模块中的一个函数,用于复制文件,并尝试保留文件的元数据(metadata)。这个函数会创建一个新的文件,其内容、权限位、时间戳以及其他可能的元数据都与源文件相同。
参数说明:
- src:源文件路径,即要复制的文件的路径。
- dst:目标文件路径,即要创建的新文件的路径。
- follow_symlinks:可选参数,默认为 True。如果为 True,并且 src 是一个符号链接,则复制链接指向的文件的内容,而不是链接本身。如果为 False,则复制符号链接本身,而不是它指向的文件。
与 shutil.copy 相比,shutil.copy2 尝试复制更多的元数据。这通常包括文件的访问时间、修改时间和状态改变时间,以及在某些平台上可能还包括文件的所有者和组信息。然而,需要注意的是,由于操作系统权限的限制,复制所有者和组信息可能并不总是可能的
import shutil
shutil.copy2('source.txt', 'destination.txt')
shutil.ignore_patterns(*patterns)
这个函数返回一个函数,该函数可用于 shutil.copytree 的 ignore 参数,以忽略匹配给定模式的文件和目录。
import shutil
# 忽略所有 .tmp 文件
ignore = shutil.ignore_patterns('*.tmp')
shutil.copytree('source_dir', 'destination_dir', ignore=ignore)
shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False, dirs_exist_ok=False)
Python 的 shutil 模块中的一个函数,用于递归地复制整个目录树。
参数说明:
- src:源目录路径,即要复制的目录的路径。
- dst:目标目录路径,即要创建的新目录的路径,用于存放复制的文件和子目录。
- symlinks:可选参数,默认为 False。如果为 True,则复制符号链接本身而不是链接指向的文件或目录。如果为 False,则复制链接指向的文件或目录。
- ignore:可选参数,默认为 None。这是一个函数,它接收目录路径、目录名列表和文件名列表,并返回一个要忽略的文件和目录名的列表。如果提供了这个参数,shutil.copytree 会在复制前调用它,并忽略返回的文件和目录。
- copy_function:可选参数,默认为 copy2。这是一个函数,用于复制文件和元数据。你可以提供自己的复制函数来替代默认的 shutil.copy2。
- ignore_dangling_symlinks:可选参数,默认为 False。如果为 True,则在复制过程中忽略那些指向目录树外部的符号链接(即悬挂链接)。如果为 False,且 symlinks 为 False,则遇到悬挂链接时会引发异常。
- dirs_exist_ok:可选参数,默认为 False。如果为 True,则目标目录已经存在时不会引发错误。如果为 False,且目标目录已经存在,则会引发 FileExistsError 异常。
使用 shutil.copytree 可以非常方便地复制整个目录结构,包括子目录和文件。它还可以与 shutil.ignore_patterns 结合使用,以忽略特定模式的文件或目录。
import shutil
shutil.copytree('source_dir', 'destination_dir')
shutil.rmtree(path, ignore_errors=False, οnerrοr=None, *, onexc=None, dir_fd=None)
Python 的 shutil 模块中的一个函数,用于递归地删除一个目录及其所有内容。
参数说明:
- path:要删除的目录的路径。
- ignore_errors:可选参数,默认为 False。如果为 True,则在删除过程中遇到错误时不会抛出异常,而是继续删除其他文件和目录。如果为 False,则遇到任何错误都会抛出异常。
8 onerror:可选参数,默认为 None。这是一个回调函数,当删除操作遇到错误时会被调用。它接收两个参数:一个异常实例和一个包含出错的文件或目录路径的元组。如果提供了此参数,那么 ignore_errors 将被忽略。 - onexc:这是 shutil.rmtree 的一个已弃用的参数,其功能与 onerror 相同。你应该使用 onerror 而不是 onexc。
- dir_fd:可选参数,默认为 None。如果指定了,它应该是一个打开目录的文件描述符,用于相对路径的解析。这通常与 os.open() 一起使用,以支持在不改变当前工作目录的情况下打开文件。
shutil.rmtree 是一个强大的函数,因为它可以递归地删除整个目录树,包括所有子目录和文件。但是,由于它的这个特性,使用它时必须格外小心,以免不小心删除了重要数据。
import shutil
shutil.rmtree('directory_to_delete')
shutil.move(src, dst, copy_function=copy2)
Python 的 shutil 模块中的一个函数,用于移动文件或目录。如果目标位置与源位置在同一个文件系统中,它实际上会尝试重命名文件或目录。如果目标位置位于不同的文件系统,那么它会复制源文件或目录到目标位置,然后删除原始文件或目录。
参数说明:
- src:源文件或目录的路径。
- dst:目标文件或目录的路径。
- copy_function:可选参数,默认为 copy2。当需要在不同文件系统间移动文件或目录时,这个函数会被用来复制文件。你可以提供自己的复制函数来替代默认的 shutil.copy2。
shutil.move 函数的行为取决于源和目标的位置。如果它们位于相同的文件系统上,它会尝试使用操作系统的重命名功能来移动文件或目录。如果它们位于不同的文件系统上,它会先复制文件或目录,然后删除原始文件或目录。
使用 shutil.move 可以简化文件或目录的移动操作,因为它处理了不同文件系统间的移动情况。
import shutil
shutil.move('source.txt', 'destination_dir/source.txt')
shutil.disk_usage(path)
Python 的 shutil 模块中的一个函数,用于获取指定路径所在磁盘分区的磁盘使用情况。
参数说明:
path:要查询磁盘使用情况的路径。
该函数返回一个三元组,包含以下三个值:
- total:磁盘分区的总字节数。
- used:磁盘分区已使用的字节数。
- free:磁盘分区可用的字节数。
这些值都是以字节为单位的整数。
使用 shutil.disk_usage 可以方便地获取磁盘的使用情况,从而进行磁盘空间管理或监控。
import shutil
usage = shutil.disk_usage('/path/to/directory')
print(f"Total: {usage.total} bytes")
print(f"Used: {usage.used} bytes")
print(f"Free: {usage.free} bytes")
shutil.chown(path, user=None, group=None)
Python 的 shutil 模块中的一个函数,用于更改文件或目录的所有者和/或组。这个函数只在 Unix-like 系统(如 Linux 和 macOS)上可用,因为它依赖于 Unix 的 chown 系统调用。
参数说明:
- path:要更改所有者和/或组的文件或目录的路径。
- user:可选参数,指定新的所有者用户名或用户 ID。如果为 None,则不会更改所有者。
- group:可选参数,指定新的组名或组 ID。如果为 None,则不会更改组。
请注意,为了成功运行 shutil.chown,Python 脚本通常需要以 root 用户身份运行,或者当前用户需要对目标文件或目录有足够的权限来更改其所有者和/或组。
import shutil
import pwd
import grp
# 获取用户ID和组ID
user_id = pwd.getpwnam('username').pw_uid
group_id = grp.getgrnam('groupname').gr_gid
# 改变文件的所有者和组
shutil.chown('file.txt', user=user_id, group=group_id)
shutil.which(cmd, mode=os.F_OK | os.X_OK, path=None)
函数用于在系统的 PATH 环境变量中查找指定的命令,并返回该命令的完整路径。如果找不到命令,则返回 None。
参数说明:
- cmd:要查找的命令名。
- mode:文件的访问模式,默认为 os.F_OK | os.X_OK,表示文件必须存在且可执行。
- path:用于搜索命令的目录列表,如果未指定,则使用系统的 PATH 环境变量。
下面是一个使用 shutil.which 函数的示例:
import shutil
import os
# 查找 ls 命令的路径
ls_path = shutil.which('ls')
if ls_path:
print(f"找到 ls 命令,路径为:{ls_path}")
else:
print("未找到 ls 命令")
# 查找一个不存在的命令
nonexistent_cmd_path = shutil.which('nonexistent_command')
if nonexistent_cmd_path:
print(f"找到命令:{nonexistent_cmd_path}")
else:
print("未找到命令")
在 Unix-like 系统(如 Linux 或 macOS)中,shutil.which 通常会很有用,因为它可以方便地找到系统命令的路径。在 Windows 系统中,由于 PATH 环境变量的处理方式和 Unix-like 系统不同,这个函数同样可以工作,但是需要注意的是 Windows 命令通常具有 .exe 或 .com 等扩展名。
注意:如果要在非标准路径下查找命令,或者需要自定义搜索路径,可以通过 path 参数指定。例如:
custom_path = ['/my/custom/path', '/another/path']
custom_cmd_path = shutil.which('my_custom_command', path=':'.join(custom_path))
这里,custom_path 是一个自定义的目录列表,我们使用冒号 : 作为分隔符(在 Unix-like 系统中)将其连接成一个字符串,然后传递给 shutil.which 函数。在 Windows 系统中,应该使用分号 ; 作为分隔符。