这是我参与8月更文挑战的第3天,活动详情查看:8月更文挑战
✰ 回顾复习
我们在前面已经学习了对文件操作的os模块,对文件路径操作的os.path模块。
本期,我们继续学习关于文件的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"))
✧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模块来为我们服务,提高我们解决问题的速度~
以上是本期内容,欢迎大佬们点赞评论指正,下次见~ღ( ´・ᴗ・` )比心