shutil模块详解

shutil模块提供了一系列高级文件操作功能,包括复制、移动、删除和搜索文件或目录。shutil 模块对压缩包的处理是调用 ZipFile 和 TarFile这两个模块来进行的。

下面详细介绍并给出示例代码:

1. shutil.copy(src, dst)

复制文件,但不保留权限和时间戳等元数据。

import shutil

src = "source.txt"
dst = "destination.txt"

shutil.copy(src, dst)
print(f"File copied from {src} to {dst}.")
2. shutil.copy2(src, dst)

复制文件并保留权限、时间戳等元数据。

import shutil

src = "source.txt"
dst = "destination2.txt"

shutil.copy2(src, dst)
print(f"File copied from {src} to {dst} with metadata.")
3. shutil.copyfileobj(fsrc, fdst)

从一个文件对象复制数据到另一个文件对象。通常用于大文件的复制,因为它可以避免一次性读取整个文件到内存中。

import shutil
import os

src = "source.txt"
dst = "destination_fileobj.txt"

with open(src, 'rb') as fsrc:
    with open(dst, 'wb') as fdst:
        shutil.copyfileobj(fsrc, fdst)
print(f"File copied from {src} to {dst} using copyfileobj.")
4. shutil.copyfile(src, dst)

复制文件的内容,但不包括元数据(如权限和时间戳)。与shutil.copy()类似,但不会复制文件的权限和时间戳。

import shutil

src = "source.txt"
dst = "destination_file.txt"

shutil.copyfile(src, dst)
print(f"File content copied from {src} to {dst} without metadata.")
区别:shutil.copyfile() vs shutil.copyfileobj()
  • copyfile():适用于文件路径,直接从源文件复制到目标文件。
  • copyfileobj():适用于文件对象,适合处理大文件或流式复制,因为它可以避免一次性加载整个文件到内存中。
5. shutil.copytree(src, dst)

递归复制目录及其所有子目录和文件。

import shutil

src = "source_directory"
dst = "destination_directory"

shutil.copytree(src, dst)
print(f"Directory {src} copied to {dst}.")
6. shutil.rmtree(path)

递归删除目录及其所有子目录和文件。

import shutil

path = "destination_directory"

shutil.rmtree(path)
print(f"Directory {path} removed recursively.")
7. shutil.move(src, dst)

移动文件或目录,也可以用于重命名文件或目录。

import shutil

src = "source.txt"
dst = "moved_source.txt"

shutil.move(src, dst)
print(f"File {src} moved to {dst}.")
8. shutil.which(cmd, mode=os.F_OK | os.X_OK, path=None)

在PATH环境变量中查找可执行文件的位置。类似于Unix的which命令。

import shutil

cmd = "python"

result = shutil.which(cmd)
if result:
    print(f"{cmd} found at {result}")
else:
    print(f"{cmd} not found.")
9. shutil.copyfileobj(fsrc, fdst[, length])

从一个文件对象fsrc复制数据到另一个文件对象fdst。这通常用于大文件的复制,因为它可以避免一次性读取整个文件到内存中。

import shutil

with open('file1.txt', 'rb') as src:
    with open('file2.txt', 'wb') as dst:
        shutil.copyfileobj(src, dst)
10. shutil.copyfile(src, dst)

复制文件的内容,但不包括元数据(如权限、所有权和时间戳)。它直接从源文件路径复制到目标文件路径。

import shutil

shutil.copyfile('file1.txt', 'file2.txt')
11. shutil.copymode(src, dst)

复制文件的模式(权限),但不复制文件内容或所有权。如果目标文件已存在,它的权限将被更新为与源文件相同。

import shutil

shutil.copymode('file1.txt', 'file2.txt')
12. shutil.copystat(src, dst)

复制文件的所有状态信息,包括权限、组、用户和时间戳,但不包括文件内容。如果目标文件已存在,它的状态信息将被更新为与源文件相同。

import shutil

shutil.copystat('file1.txt', 'file2.txt')
13. shutil.copy(src, dst)

复制文件的内容和权限。相当于先执行了copyfile再执行了copymode

import shutil

shutil.copy('file1.txt', 'file2.txt')
14. shutil.copy2(src, dst)

复制文件的内容及其所有状态信息。相当于先执行了copyfile再执行了copystat

import shutil

shutil.copy2('file1.txt', 'file2.txt')
15. shutil.copytree(src, dst[, symlinks=False[, ignore=None]])

递归复制整个目录树。symlinks参数决定是否复制符号链接,ignore参数可以指定一个函数来忽略某些文件或目录。

import shutil

shutil.copytree('source_directory', 'destination_directory')
其他方法
  • shutil.move(src, dst)
    移动文件或目录。这类似于重命名操作,但可以在不同的文件系统之间移动。
import shutil

shutil.move('file1.txt', 'new_directory/')
  • shutil.make_archive(base_name, format, root_dir[, base_dir[, owner[, group[, dry_run[, logger]]]]])
    创建存档文件,如zip或tar包。
import shutil

shutil.make_archive('archive', 'zip', 'directory_to_compress')
  • shutil.unpack_archive(filename[, extract_dir[, format]])
    解压缩存档文件。
import shutil

shutil.unpack_archive('archive.zip', 'extracted_directory')
  • shutil.which(cmd[, path])
    在环境变量PATH中查找可执行文件的位置,类似于Unix的which命令。
import shutil

print(shutil.which('python'))

通过以上示例,你应该能够理解和使用shutil模块中的一些关键方法。这些方法提供了比os模块更高级的文件和目录操作功能,适合于需要进行复杂文件管理的任务。

引用链接:Python模块——shutil模块详解_数据分析与统计学之美-GitCode 开源社区 (csdn.net)

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值