Python常用模块14-python的shutil模块

一.shutil模块介绍

shutil模块提供了一系列对文件和文件集合的高阶操作。 特别是提供了一些支持文件拷贝和删除的函数。 对于单个文件的操作可以参考os模块。

1.1 目录和文件操作

操作命令操作命令解释
shutil.copyfileobj(fsrc, fdst[, length])将文件类对象 fsrc 的内容拷贝到文件类对象 fdst。 整数值 length 如果给出则为缓冲区大小。 特别地, length 为负值表示拷贝数据时不对源数据进行分块循环处理;默认情况下会分块读取数据以避免不受控制的内存消耗。 请注意如果 fsrc 对象的当前文件位置不为 0,则只有从当前文件位置到文件末尾的内容会被拷贝。
shutil.copyfile(src, dst, *, follow_symlinks=True)src 文件的内容(不含元数据)拷贝到 dst 文件并返回 dstsrcdst 是字符串形式的路径。 dst 必须是完整的目标文件名;对于接受一个目标目录路径的拷贝请参见 shutil.copy()。 如果 srcdst 指定了同一文件,则将引发 SameFileError
exception shutil.SameFileError此异常会在 copyfile() 中的源和目标为同一文件时被引发。
shutil.copymode(src, dst, *, follow_symlinks=True)src 拷贝权限位到 dst。 文件的内容、所有者和分组将不受影响。 srcdst 均为字符串形式的路径名。 如果 follow_symlinks 为假值,并且 srcdst 均为符号链接,copymode() 将尝试修改 dst 本身的模式(而非它所指向的文件)。 此功能并不是在所有平台上均可用;请参阅 copystat() 了解详情。 如果 copymode() 无法修改本机平台上的符号链接,而它被要求这样做,它将不做任何操作即返回。
shutil.copystat(src, dst, *, follow_symlinks=True)src 拷贝权限位、最近访问时间、最近修改时间以及旗标到 dst。 在 Linux 上,copystat() 还会在可能的情况下拷贝“扩展属性”。 文件内容、所有者和分组将不受影响。 srcdst 均为字符串形式的路径名。
shutil.copy(src, dst, *, follow_symlinks=True)将文件 src 拷贝到文件或目录 dst。 src 和 dst 应为字符串。 如果 dst 指定了一个目录,文件将使用 src 中的基准文件名拷贝到 dst。 返回新创建文件所对应的路径。
shutil.copy2(src, dst, *, follow_symlinks=True)类似于 copy(),区别在于 copy2() 还会尝试保留文件的元数据
shutil.ignore_patterns(*patterns)这个工厂函数会创建一个函数,它可被用作 copytree()ignore 可调用对象参数,以忽略那些匹配所提供的 glob 风格的 patterns 之一的文件和目录。 参见以下示例。
shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False)递归地拷贝以 src 为根路径的整个目录树,返回目标目录。 名为 dst 的目标目录不必已存在;它本身和还不存在的父目录都将被自动创建。 目录的权限和时间信息将通过 copystat() 来拷贝,单独的文件将使用 shutil.copy2() 来拷贝。
shutil.rmtree(path, ignore_errors=False, οnerrοr=None)删除一个完整的目录树;path 必须指向一个目录(但不能是一个目录的符号链接)。 如果 ignore_errors 为真值,删除失败导致的错误将被忽略;如果为假值或是省略,此类错误将通过调用由 onerror 所指定的处理程序来处理,或者如果此参数被省略则将引发一个异常。
shutil.move(src, dst, copy_function=copy2)递归地将一个文件或目录 (src) 移至另一位置 (dst) 并返回目标位置。
shutil.disk_usage(path)返回给定路径的磁盘使用统计数据,形式为一个 named tuple,其中包含 total, usedfree 属性,分别表示总计、已使用和未使用空间的字节数。 在 Windows 上,path 必须是一个目录;在 Unix 上,它可以是一个文件或一个目录。
shutil.chown(path, user=None, group=None)修改给定 path 的所有者 user 和/或 group
shutil.which(cmd, mode=os.F_OK or os.X_OK, path=None)返回当给定的 cmd 被调用时将要运行的可执行文件的路径。 如果没有 cmd 会被调用则返回 None
exception shutil.Error此异常会收集在多文件操作期间所引发的异常。 对于 copytree(),此异常参数将是一个由三元组 (srcname, dstname, exception) 构成的列表。

1.2 归档操作

操作命令操作命令解释
shutil.make_archive(base_name, format[, root_dir[, base_dir[, verbose[, dry_run[, owner[, group[, logger]]]]]]])创建一个归档文件(例如 zip 或 tar)并返回其名称
shutil.get_archive_formats()返回支持的归档格式列表。 所返回序列中的每个元素为一个元组 (name, description)
shutil.register_archive_format(name, function[, extra_args[, description]])为 name 格式注册一个归档程序
shutil.unregister_archive_format(name)从支持的格式中移除归档格式 name
shutil.unpack_archive(filename[, extract_dir[, format]])解包一个归档文件。 filename 是归档文件的完整路径。
shutil.register_unpack_format(name, extensions, function[, extra_args[, description]])注册一个解包格式。 name 为格式名称而 extensions 为对应于该格式的扩展名列表,例如 Zip 文件的扩展名为 .zip。
shutil.unregister_unpack_format(name)撤销注册一个解包格式。 name 为格式的名称。
shutil.get_unpack_formats()返回所有已注册的解包格式列表。 所返回序列中的每个元素为一个元组 (name, extensions, description)。

二.shutil模块实例

2.1 shutil.copyfileobj

shutil.copyfileobj(文件1,文件2):将文件1的数据覆盖copy给文件2。

代码:

import shutil

f1 = open("1.txt",encoding="utf-8")
f2 = open("2.txt","w",encoding="utf-8")

shutil.copyfileobj(f1,f2)

2.2 shutil.copyfile

shutil.copyfile(文件1,文件2):不用打开文件,直接用文件名进行覆盖copy。

代码:

import shutil

shutil.copyfile("1.txt","3.txt")

2.3 shutil.copymode

shutil.copymode(文件1,文件2):只拷贝权限,内容组,用户,均不变。

def copymode(src,dst):

"""copy mode bits from src to dst"""

if hasattr(os,'chmod'):

st = os.stat(stc)

mode = stat.S_IMODE(st.st_mode)

os.chmod(dst,mode)

2.4 shutil.copystat

shutil.copystat(文件1,文件):只拷贝了权限。

2.5 shutil.copy

shutil.copy(文件1,文件2):拷贝文件和权限都进行copy。

2.6 shutil.copy2

shutil.copy2(文件1,文件2):拷贝了文件和状态信息。

2.7 shutil.copytree

shutil.copytree(源目录,目标目录):可以递归copy多个目录到指定目录下。

2.8 shutil.rmtree

shutil.rmtree(目标目录):可以递归删除目录下的目录及文件。

2.9 shutil.move

shutil.move(源文件,指定路径):递归移动一个文件。

2.10 shutil.make_archive()

shutil.make_archive():可以压缩,打包文件。

代码:

import shutil

shutil.make_archive("shutil_archive_test","zip","E:\python\learn_python1\shutil")

测试结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZsuUqguA-1618897759587)(https://upload-images.jianshu.io/upload_images/2638478-b73c7549a2e07afc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

2.11 shutil.disk_usage(path)

shutil.disk_usage(path) 返回给定路径的磁盘使用统计数据,形式为一个 named tuple,其中包含 total, usedfree 属性,分别表示总计、已使用和未使用空间的字节数。 在 Windows 上,path 必须是一个目录;在 Unix 上,它可以是一个文件或一个目录。

代码:

import shutil

BytesPerGB = 1024 * 1024 * 1024

(total, used, free) = shutil.disk_usage("E:\python\learn_python1\shutil")
print ("Total: %.2fGB" % (float(total)/BytesPerGB))
print ("Used:  %.2fGB" % (float(used)/BytesPerGB))

测试记录:

E:\python\learn_python1\venv\Scripts\python.exe E:/python/learn_python1/shutil/shutil_test3.py
Total: 465.76GB
Used:  409.95GB
Total: 465.76GB
Used:  409.95GB

Process finished with exit code 0

参考:

1.https://docs.python.org/zh-cn/3.6/library/shutil.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值