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, onerror=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")

测试结果:


image.png

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容