shutil 模块高阶文件操作

shutil模块介绍:

shutil模块是在os模块基础上进行扩充的;
shutil模块提供了对 文件和文件夹(目录) 进行复制、移动、删除、压缩和解压缩的功能;

导入模块:

import shutil

复制文件:

shutil.copy(src, dst, *, follow_symlinks=True)

src 参数为要复制的源文件路径,路径中必须具体到某个文件名,不能是文件夹
dst 参数为要复制到的目标文件路径,路径中文件名可加可不加,文件名可以跟src中的文件名一样,也可以另起名;
    如果文件已经存在则覆盖掉,不存在则创建文件;但路径中的文件夹不存在时则报错
返回值:目标文件路径
该方法只复制文件的内容和权限,其他文件属性如 日期时间(创建 修改) 没有复制

示例:

  res = shutil.copy("1.png", "./abc")
  print(res)

shutil.copyfile(src, dst, *, follow_symlinks=True)

src 参数为要复制的源文件路径,路径中必须具体到某个文件名,不能是文件夹
dst 参数为要复制到的目标文件路径,路径中必须加上文件名,文件名可以跟src中的文件名一样,也可以另起名
      如果文件已经存在则覆盖掉,不存在则创建文件;但路径中的文件夹不存在时则报错
返回值:目标文件路径

示例:

  res = shutil.copyfile("2.png", "./abc/copy_2.png")
  print(res)

shutil.copy2(src, dst, *, follow_symlinks=True)

src 参数为要复制的源文件路径,路径中必须具体到某个文件名,不能是文件夹
dst 参数为要复制到的目标文件路径,路径中文件名可加可不加,文件名可以跟src中的文件名一样,也可以另起名
      如果文件已经存在则覆盖掉,不存在则创建文件;但路径中的文件夹不存在时则报错
返回值:目标文件路径
该方法同时会复制源文件的内容和stat信息,包含:用户、组、权限、时间信息等
经测试 创建时间无法复制

示例:

  res = shutil.copy2("2.png", "./abc")
  print(res)

shutil.copyfileobj(fsrc, fdst, length=16*1024)

fsrc 参数为要复制的源文件句柄,句柄路径中必须具体到某个文件名,不能是文件夹
fdst 参数为要复制到的目标文件句柄,句柄路径中必须加上文件名,文件名可以跟src中的文件名一样,也可以另起名
      如果文件已经存在则覆盖掉,不存在则创建文件;但路径中的文件夹不存在时则报错
length 参数为复制内容大小,默认 16*1024 字节
返回值:None

示例:

  fsrc = open("2.png", 'rb')  # 源文件句柄
  fdst = open("./abc/copy_2.png", 'wb')  # 目标文件句柄
  res = shutil.copyfileobj(fsrc, fdst)
  print(res)

复制目录树:

shutil.copytree(src, dst, ignore=None, copy_function=copy2)

src 参数为要复制的源目录路径,必须是文件夹
dst 参数为要复制到的目标目录路径,目标目录路径必须不能存在
copy_function 参数指定一个复制函数,可以是shutil.copy或shutil.copy2(默认)
ignore 参数指定一个可调用对象(函数),copytree每次递归访问文件夹时,会将当前目录和目录的os.listdir()作为参数调用一次ignore,
       该可调用对象必须返回一个相对于当前目录的目录和文件名序列(即其第二个参数的子集);随后这些名称将在拷贝进行中被忽略;
       如指定:ignore=shutil.ignore_patterns("*.py") 代表以.py结尾的文件或文件夹都不会复制。
返回值:目标文件路径

示例:

  res = shutil.copytree('abcd', "./d") #把abcd目录下的所有文件包含文件夹复制到d目录下
  print(res)

  res = shutil.copytree('abcd', "./d", ignore=shutil.ignore_patterns("*.md")) #忽略以.md结尾的文件不复制
  print(res)

文件移动:

shutil.move(src, dst, copy_function=copy2)

src 参数为要复制的源文件路径,可以是文件或文件夹
dst 参数为要复制到的目标文件路径,可以是文件或文件夹,路径中文件名可加可不加,文件名可以跟src中的文件名一样,也可以另起名
    如果文件已经存在则覆盖掉,不存在则创建文件;但路径中的文件夹不存在时则报错
返回值:目标文件路径

示例:

  src = "2.png" #文件
  dst = "./abc"
  res = shutil.move(src, dst)
  print(res)

  src = "b" #文件夹
  dst = "./abc"
  res = shutil.move(src, dst)
  print(res)

删除文件和文件夹:

shutil.rmtree(path, ignore_errors=False, οnerrοr=None)

path 参数为要删除的源文件路径
ignore_errors 是否忽略错误,默认不忽略,遇到错误时会抛出异常
返回值:None
该方法可以递归彻底删除文件夹,包含子文件夹...,需要注意。
不能删除压缩文件。

示例:

  res = shutil.rmtree('abc') #删除abc目录
  print(res)

文件压缩:

shutil.make_archive(base_name, format, root_dir=None, base_dir=None)

base_name 参数为压缩后的存放路径,必须是文件夹,可以不存在
format 参数为压缩格式:可以是:"zip", "tar", "gztar","bztar", or "xztar"
root_dir 参数为需要压缩的目录,必须是目录,默认表示当前目录
base_dir 参数为,默认表示当前目录
返回值:压缩后的文件路径
压缩后能完整的保留文件夹结构

示例:

  res = shutil.make_archive("b", format="zip", root_dir="./abc")
  print(res)

文件解压缩:

shutil.unpack_archive(filename, extract_dir=None, format=None)

filename 参数为要解压缩的源文件路径
extract_dir 参数为提取后的路径,默认当前路径
format 参数为解压缩格式,可以是:"zip", "tar", "gztar","bztar", or "xztar",不指定默认为根据源文件后缀
返回值:None
注意:如果文件名有中文,解压后文件名可能是乱的

示例:

  res = shutil.unpack_archive(filename='abc.zip', extract_dir="./") 
  print(res)

结束。
以上内容仅学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值