shutil模块

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shutil模块相关的知识,希望对你有一定的参考价值。

对文件进行copy、还可以压缩包

文件copy

1)shutil.copyfileobj(fsrc, fdst[, length])

将文件内容拷贝到另一个文件中,需要打开文件,fsrc,fdst是2个文件的文件句柄

1 import shutil
2 with open("old_file",encoding = "utf-8") as f1,3     open("new_file","w",encoding = "utf-8") as f2:
4     shutil.copyfileobj(f1,f2)

2)shutil.copyfile(src, dst)

从一个文件拷贝到另一个文件,不需要打开文件这样的操作,src,dst 是2个文件的文件名

1 shutil.copyfile("old_file","new_file3")

3)shutil.copymode(src, dst)  ??

仅拷贝权限。内容、组、用户均不变  

[[email protected] ~]# ll
total 8
-rwxr-xr-x 1 root   root   0 Apr  1 16:05 zhangqigao   #有执行权限
-rw-r--r-- 1 whtest whtest 0 Apr  1 16:06 zhangqigao_old  #没有执行权限
>>> import os,shutil
>>> os.chdir("/root")
#拷贝"zhangqigao_old"权限给"zhangqigao"
>>> shutil.copymode("zhangqigao_old","zhangqigao") 
[[email protected] ~]# ll
total 8
-rw-r--r-- 1 root   root   0 Apr  1 16:05 zhangqigao  # 获得跟"zhangqigao_old"一样的文件权限
-rw-r--r-- 1 whtest whtest 0 Apr  1 16:06 zhangqigao_old

4)shutil.copystat(src, dst) ??

拷贝状态的信息,包括:mode bits, atime, mtime, flags

 

5)shutil.copy(src, dst)

拷贝文件和权限

 1 #拷贝前
 2 [[email protected]_sh temp]# ll
 3 total 0
 4 -rwxr-xr-x 1 jenkins jenkins 0 Apr  1 16:26 zhangqigao_old
 5 #拷贝中
 6 >>> import os,shutil
 7 >>> os.chdir("/temp")
 8 >>> shutil.copy("zhangqigao_old","zhangqigao")
 9 #拷贝结果输出
10 [[email protected]_sh temp]# ll
11 total 0
12 -rwxr-xr-x 1 root    root    0 Apr  1 17:42 zhangqigao  #拷贝了zhangqigao_old文件和文件权限
13 -rwxr-xr-x 1 jenkins jenkins 0 Apr  1 16:26 zhangqigao_old

6)shutil.copy2(src, dst)

功能:拷贝文件和文件的状态

 1 #拷贝前
 2 [[email protected]_sh temp]# ll
 3 total 0
 4 -rwxr-xr-x 1 jenkins jenkins 0 Apr  1 16:26 zhangqigao_old
 5 #拷贝中
 6 >>> import os,shutil
 7 >>> os.chdir("/temp")
 8 >>> shutil.copy2("zhangqigao_old","zhangqigao")
 9 #拷贝后
10 [[email protected]_sh temp]# ll
11 total 0
12 -rwxr-xr-x 1 root    root    0 Apr  1 16:26 zhangqigao  #拷贝了zhangqigao_old的文件和状态
13 -rwxr-xr-x 1 jenkins jenkins 0 Apr  1 16:26 zhangqigao_old

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

递归的去拷贝文件,将文件1递归拷贝到文件2

1 shutil.copytree("a","b")

技术分享

 

8)shutil.rmtree(path[, ignore_errors[, onerror]])

递归删除文件目录,会删除空文件 

1 shutil.rmtree("b")

技术分享

 

 

 文件打包

1)shutil.make_archive(base_name, format,...)

  • 创建压缩包并返回文件路径,例如:zip、tar
  • base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
  • 如:www                        =>保存至当前路径
  • 如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/
  • format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
  • root_dir: 要压缩的文件夹路径(默认当前目录)
  • owner: 用户,默认当前用户
  • group: 组,默认当前组
  • logger: 用于记录日志,通常是logging.Logger对象
1 shutil.make_archive("wwwwww","gztar","E:\\python_3.5\\second\\json模块")

技术分享

 

2)zipfile 

shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的

 

功能:以zip的形式压缩文件,注意了这个只能压缩文件,不能压缩目录,如果压缩,也只能显示空目录。

压缩

import zipfile
z = zipfile.ZipFile("json模块.zip","w")
z.write("new_file")
z.write("shutil模块.py")

z.close()

技术分享

解压

1 z = zipfile.ZipFile(json模块.zip, r)
2 z.extractall()
3 z.close()

3、tarfile

 1 import tarfile
 2 
 3 # 压缩
 4 tar = tarfile.open(your.tar,w)
 5 tar.add(/Users/wupeiqi/PycharmProjects/bbs2.zip, arcname=bbs2.zip)
 6 tar.add(/Users/wupeiqi/PycharmProjects/cmdb.zip, arcname=cmdb.zip)
 7 tar.close()
 8 
 9 # 解压
10 tar = tarfile.open(your.tar,r)
11 tar.extractall()  # 可设置解压地址
12 tar.close()
13 
14 tarfile 压缩解压

 

以上是关于shutil模块的主要内容,如果未能解决你的问题,请参考以下文章

Python之shutil模块

shutil模块

python笔记-----模块(time,os,sys,random,shutil)

shutil模块详解

shutil模块

05-shutil 模块