Python shutil模块 | 8月更文挑战

814 阅读4分钟

玩转Python

这是我参与8月更文挑战的第3天,活动详情查看:8月更文挑战

✰ 回顾复习

我们在前面已经学习了对文件操作的os模块,对文件路径操作的os.path模块

Python文件操作模块

本期,我们继续学习关于文件的Python模块—shutil。

(#^.^#),学习shutil模块可以对文件及文件夹压解缩、移动、拷贝等高级的操作

✧1.shutil模块概述

shutil模块顾明思议sh + util,shell工具的意思,shutil模块有如下特点

  • python标准库中提供的,主要用来做文件和文件夹的拷贝、移动、删除等
  • 支持文件和文件夹的压缩、解压缩操作
  • shutil模块对os模块提供的对目录或文件的一般操作进行了补充,提供移动、复制、压缩、解压等操作,属于高级的文件操作模块

💻注意

shutil模块提供的拷贝文件也是不能拷贝文件的元数据。 (元数据:文件的大小与修改日期等信息。)

  • 在Linux系统上,拷贝源文件之后将丢失所有者和组以及安全数据
  • 在MAC OS系统上,文件操作记录和其他元数据都不能使用,拷贝的文件创建者等信息会被丢失,导致显示信息不准确
  • 在window系统上,拷贝的文件不拷贝文件所有者、ACL和替代数据流

✧2. 目录文件操作

shutil模块提供了os模块对文件没有的拷贝、移动。常用的方法如下:

方法作用
shutil.copyfileobj(fsrc,fdst[length=16*1024])将文件内容拷贝到另一个文件中,可以指定大小的内容
shutil.copyfile(src,dst)拷贝文件
shutil.copymode(src,dst)仅拷贝权限。内容、组、用户均不变
shutil.copystat(src,dst)仅拷贝状态的信息,
包括:mode bits, atime, mtime, flags
shutil.copy(src,dst)拷贝文件和权限
shutil.copy2(src,dst)拷贝文件和状态信息
shutil.ignore_patterns(*patterns)递归的复制文件内容及状态信息,ignore的意思是排除
shutil.copytree(src,dst,symlinks=False,ignore=None,ignore=None)拷贝软连接
shutil.rmtree(path[,ignore_errors[,onerror]])递归删除文件
shutil.move(src,dst)递归的去移动文件,它类似mv命令,其实就是重命名。

🌟shutil.copyfile(src,dst)

拷贝文件📃;可以指定文件的大小。

注意:是src和dst必须是文件,不可以是目录 否则会报IOError: [Errno 13] Permission denied:

我们来实现一下,从A文件夹下的文件批量复制到B文件夹下

import shutil
import os

def copyfile():

    filefolds = os.listdir('./old')
    print("old文件夹里文件:",filefolds)
    i = 0
    for file in filefolds:
        i = i+1
        new_name = "New/"+"New"+str(i)+"_test"+'.txt'
        print(new_name)
        filename = "old/"+file+"/test.txt"
        shutil.copyfile(filename, new_name)
copyfile()

批量复制文件运行结果

🌟 shutil.copytree(src,dst,symlinks=False,ignore=None,ignore=None)

递归复制目录及子目录的文件和状态信息 注意:

  • src: 源目录(需要拷贝的内容地址)
  • dst:如果存在的话,是不可覆盖的;,否则会报WindowsError: [Error 183]
  • symlinks:指定是否复制软链接。小心陷入死循环
  • ignore:指定不参与复制的文件,其值应该是一个ignore_patterns()方法
  • cpoy_founction:指定复制的模式
import os
import shutil

# 切换到F:\JueJin目录下
os.chdir(r"F:\JueJin")

shutil.copytree("./old/old0_test","./New3")

print("dst目录下的文件:",os.listdir("./New3"))

copytree运行结果

✧3. 解压缩操作

shutil模块也提供了对文件📃和文件夹📁打包、压缩、解压缩操作,常见方法如下:

方法作用
shutil.make_archive(base_name,format[,root_dir[,base_dir[]]])创建一个归档文件(例如 zip 或 tar)并返回其名称
shutil.get_archive_formats()返回支持的归档格式列表
shutil.register_archive_format(name,funvtion[,extra_args[,description]])为name格式注册一个归档程序

ps: shutil模块支持压缩、解压操作底层是依赖zipfile模块和tarfile模块

🌟shutil.make_archive(base_name,format[,root_dir[,base_dir[...]]])

base_name:压缩打包后的文件名或者路径名 format:压缩或者打包格式“zip”,"tar","bztar"or"gztar" root_dir: 将哪个目录或者文件打包(也就是源文件)

makearchivefile("./old","./old/old0_test")

生成压缩包

✍总结

本期,我们学习shutil模块对os模块对文件操作进行补充,重点有两点

  • 对文件支持拷贝、移动、删除操作
  • 能对文件及文件夹进行压缩和解压缩

我们在需要是要对文件进行拷贝移动及压缩解压缩等操作,可以借助Python里面的shutil模块来为我们服务,提高我们解决问题的速度~

以上是本期内容,欢迎大佬们点赞评论指正,下次见~ღ( ´・ᴗ・` )比心