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:\new\xxx.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)

  

 

posted on 2017-07-09 11:50  bainianminguo  阅读(845)  评论(0编辑  收藏  举报