shutil模块是进行文件夹或者文件的拷贝,压缩,重命名等操作的第三方模块
下面我们来介绍一下shutil模块
1、shutil.copyfileobj,拷贝文件的内容
src = "c:/tmp/a_old.txt" det = "c:/tmp/a_new.txt" shutil.copyfileobj(open(src,"r"),open(det,"w")) #执行上面这个命令,我们可以看到新建了一个a_new的文件,并把a_old中的内容拷贝到a_new中
2、shutil.copyfile,拷贝文件
shutil.copyfile(src,det) #执行上面这个命令,我们可以看到新拷贝了一个a_new的文件
3、shutil.copymode,拷贝文件权限,其他信息比如内容,组,用户信息均不变
det = "c:/tmp/a_new_mode.txt" shutil.copymode(src,det) #使用这个命令,det要首先创建一个文件,我们可以看到这个文件的内容未变化
4、shutil.coypstat,拷贝文件的状态信息,这个命令也需要先创建然后一个文件,然后拷贝状态信息到目的文件,包括mode bits, atime, mtime, flags这些信息
det = "c:/tmp/a_new_stat.txt" shutil.copystat(src,det)
5、shutil.copy,拷贝文件和权限
det = "c:/tmp/a_copy.txt" shutil.copy(src,det)
6、shutil.copy2,拷贝文件和状态信息
det = "c:/tmp/a_copy2.txt" shutil.copy2(src,det)
7、shutil.copytree,进行递归拷贝,默认软连接不拷贝
# shutil.copytree(src,des,symlinks=None,ignore=None) #最简单的用户,进行递归拷贝,des这个文件夹要不存在,才可以执行成功,这个是拷贝a目录下的文件,而不会拷贝a这个目录本身 src = "c:/a" dst = "c:/4" # shutil.copytree(src,dst)
8、shutil.retree,递归删除文件
src = "c:/3" shutil.rmtree(src)
9、shutil.move,递归的移动文件或者目录,原文件或者目录就不存在了
# shutil.move() # src = "c:/4" # shutil.move(src,"c:/4_new") # src = "C:/4_new/b/c/d.txt" # dst = "C:/4_new/f.txt" # shutil.move(src,dst)
10、shutil.make_archive,压缩文件夹
# 下面是make_archive的参数 # base_name 压缩的目录或者名称,如果只有名称,则会在把压缩的文件放在当前目录 # format 压缩包的种类,zip tar bztar gztar # root_dir 要压缩的文件夹路径 # owner 用户,默认是当前用户 # group 组,默认是当前组 # logger 用于记录日志文件,通常在logging.Logger对象 r = shutil.make_archive(base_name="e:/new/xxx",format="zip",root_dir="C:/2/") print(r) # e: ewxxx.zip # 这个命令的意思就是 # 压缩C:/2/这个目录下的所有文件夹和文件,然后创建zip压缩包,把zip压缩包放在e:/new/目录下,重命名为xxx,返回的值就是base_name的值
压缩的例子和支持的压缩包的格式
import shutil import os # for i in dir(shutil): # print(i) print(os.path.basename(os.path.abspath(__file__))) file_path = os.path.dirname(os.path.abspath(__file__)) src_file = file_path + "\" + "xxx" + "." + "py" # des_file = file_path + "\" + "xxx_bak" + "." + "py" base_name = file_path + "\" + "压缩包" format_type_list = ["zip","tar","gztar","bztar","xztar"] root_dir = file_path for format_type in format_type_list: for i in range(1000): base_name = file_path + "\" + "压缩包" + str(i) shutil.make_archive(base_name=base_name,format=format_type,root_dir=root_dir)