• 导入模块:
import shutil
  • copy()

功能:复制文件

格式:shutil.copy('来源文件','目标地址')

返回值:复制之后的路径

拷贝文件和权限

  • copy2()

功能:复制文件,保留元数据

格式:shutil.copy2('来源文件','目标地址')

返回值:复制之后的路径

拷贝文件和状态信息

  • copyfileobj()

将一个文件的内容拷贝的另外一个文件当中

格式:shutil.copyfileobj(open(来源文件,'r'),open('目标文件','w'))

返回值:无

  • copyfile()

功能:将一个文件的内容拷贝的另外一个文件当中

格式:shutil.copyfile(来源文件,目标文件)

返回值:目标文件的路径

copyfile只拷贝文件内容)

  • copytree()

功能:复制整个文件目录

格式:shutil.copytree(来源目录,目标目录)

返回值:目标目录的路径

注意:无论文件夹是否为空,均可以复制,而且会复制文件夹中的所有内容

#  后面的目标路径必须没有,否则报错,ignore 后的shutil.ignore_patterns()中的参数用正则表达式

  • copymode()

copymode(src, dst)

功能:拷贝权限

(前提是dst文件存在,不然报错)

  • copystat()

功能:拷贝元数据(状态)

  • rmtree()

功能:移除整个目录,无论是否空

格式:shutil.rmtree(目录路径)

返回值:无

注意:#删除时包括外层的文件夹

  • move()

功能:移动文件或者文件夹

格式:shutil.move(来源地址,目标地址)

返回值:目标地址

which() 功能:检测命令对应的文件路径 格式:shutil.which(‘命令字符串’) 返回值:命令文件所在位置 注意:window和linux不太一样。 window的命令都是.exe结尾,linux则不是 disk_usage()

功能:检测磁盘使用信息

格式:disk_usage(‘盘符’)

返回值:元组

归档和解包操作

归档:将多个文件合并到一个文件当中,这种操作方式就是归档。

解包:将归档的文件进行释放。

压缩:压缩时将多个文件进行有损或者无损的合并到一个文件当中。

解压缩:就是压缩的反向操作,将压缩文件中的多个文件,释放出来。

注意:压缩属于归档!

  • make_archive()

功能:归档函数,归档操作

格式:shutil.make_archive('目标文件路径','归档文件后缀','需要归档的目录')

返回值:归档文件的最终路径

注意:要压缩的文件夹路径的最后一个是压缩后的文件名称  root_dir是要压缩的文件路径

  • unpack_archive()

功能:解包操作

格式:shutil.unpack_archive('归档文件路径','解包目标文件夹')

返回值:None

注意:文件夹不存在会新建文件夹

# 可以重复多次解包 (解压)

  • get_archive_formats()

功能:获取当前系统已注册的归档文件格式(后缀)

格式:shutil.get_archive_formats()

返回值:列表   [(后缀,解释),(后缀,解释),(后缀,解释)...]

  • get_unpack_formats()

功能:获取当前系统已经注册的解包文件格式(后缀)

格式:shutil.get_unpack_formats()

返回值:列表   [(后缀,解释),(后缀,解释),(后缀,解释)...]

EG1:

import shutil
shutil.copyfileobj(open("E:\\001.txt", "r"), open("E:\\002.txt", "w"))
shutil.copyfile("E:\\001.txt", "E:\\002.txt")
shutil.copy2("E:\\001.txt", "E:\\002.txt")
shutil.copymode("E:\\001.txt", "E:\\002.txt")
shutil.copystat("E:\\001.txt", "E:\\002.txt")
# 后面的目标路径必须没有,否则报错,ignore 后的shutil.ignore_patterns()中的参数用正则表达式
shutil.copytree("E:\\099","E:\\098\\",ignore=shutil.ignore_patterns("*.py"))
#包括外层的文件夹
shutil.rmtree("E:\\098\\")
shutil.move("E:\\100\\","E:\\098\\")
# 要压缩的文件夹路径的最后一个是压缩后的文件名称  root_dir是要压缩的文件路径
shutil.make_archive("D:\\001", "zip", root_dir="E:\\099\\")
# 可以重复多次解包 (解压)
shutil.unpack_archive("D:\\001.zip",extract_dir="D:\\001" )
print(shutil.get_archive_formats())
print(shutil.get_unpack_formats())
print(shutil.disk_usage('d:'))
print(shutil.get_archive_formats())
print(shutil.get_unpack_formats())

执行结果:

[('bztar', "bzip2'ed tar-file"), ('gztar', "gzip'ed tar-file"), ('tar', 'uncompressed tar file'), ('xztar', "xz'ed tar-file"), ('zip', 'ZIP file')]
 [('bztar', ['.tar.bz2', '.tbz2'], "bzip2'ed tar-file"), ('gztar', ['.tar.gz', '.tgz'], "gzip'ed tar-file"), ('tar', ['.tar'], 'uncompressed tar file'), ('xztar', ['.tar.xz', '.txz'], "xz'ed tar-file"), ('zip', ['.zip'], 'ZIP file')]
 usage(total=212601925632, used=157784317952, free=54817607680)
 [('bztar', "bzip2'ed tar-file"), ('gztar', "gzip'ed tar-file"), ('tar', 'uncompressed tar file'), ('xztar', "xz'ed tar-file"), ('zip', 'ZIP file')]
 [('bztar', ['.tar.bz2', '.tbz2'], "bzip2'ed tar-file"), ('gztar', ['.tar.gz', '.tgz'], "gzip'ed tar-file"), ('tar', ['.tar'], 'uncompressed tar file'), ('xztar', ['.tar.xz', '.txz'], "xz'ed tar-file"), ('zip', ['.zip'], 'ZIP file')]