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)
结束。
以上内容仅学习。