首页 » 编程 » Python-4.常用模块 » 正文

shutil 模块

介绍:

shutil 模块是 高级的文件、文件夹、压缩包 处理模块

 

shutil的方法:

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

将文件内容拷贝到另一个文件中

import shutil
shutil.copyfileobj(open("a.txt", "r"), open("b.txt", "w"))

运行结果:a.txt的内容成功拷贝到了b.txt中。

 

关于length参数:

length是指每次从a.txt中读多少,而不是只读多少,默认为length=16*1024 。

shutil.copyfileobj(open("a.txt", "r"), open("b.txt", "w"), length=10)

表示 从a.txt中拷贝文件到b.txt中,每次读取长度为10

 

shutil.copyfile(src, dst)

拷贝文件

import shutil
shutil.copyfile("a.txt", "c.txt")  # c.txt 可以不存在

运行结果:成功copy了新文件c.txt

 

shutil.copymode(src, dst)

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

import shutil
shutil.copymode("a.txt", "c.txt")   # c.txt 必须存在

 

shutil.copystat(src, dst)
仅拷贝状态的信息,包括:mode bits, atime, mtime, flags

import shutil
shutil.copystat("a.txt", "c.txt")  # c.txt 必须存在

 

shutil.copy2(src, dst)
拷贝文件和状态信息

import shutil
shutil.copy2("a.txt", "c.txt")

 

shutil.ignore_patterns(*patterns)
shutil.copytree(src, dst, symlinks=False, ignore=None)
递归的去拷贝文件夹

import shutil
shutil.copytree("../model", "../model2")  # 将model文件夹拷贝到model2文件夹,目标目录不能存在
shutil.copytree("../model", "../model3", ignore=shutil.ignore_patterns("*.txt", "time mod.py"))  # 将model文件夹拷贝到model3文件夹,同时忽略 所有 .txt的文件和time mod.py文件。目标目录不能存在,且对目标目录需要有可写权限。

 

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

递归的去删除文件

import shutil
shutil.rmtree("../model3")  # 删除model3文件夹

 

shutil.move(src, dst)
递归的去移动文件,它类似mv命令,其实就是重命名。

import shutil
shutil.move("../model2", "../model4")  # 将model2重命名了model4

 

shutil.make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0, dry_run=0, owner=None, group=None, logger=None)

创建压缩包并返回文件路径,例如:zip、tar

  • base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,

如 data_bak =>保存至当前路径

如:/tmp/data_bak =>保存至/tmp/

  • format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
  • root_dir: 要压缩的文件夹路径(默认当前目录)
  • owner: 用户,默认当前用户
  • group: 组,默认当前组
  • logger: 用于记录日志,通常是logging.Logger对象
import shutil
shutil.make_archive("model", "gztar", "../model")  # 压缩model目录到当前目录,压缩后文件名为model.tar.gz
shutil.make_archive("E:\\test\\model", "gztar", "../model")  # 压缩model目录到E:\test\目录下,压缩后文件名为model.tar.gz

shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细:
zipfile压缩&解压缩

import zipfile

# 压缩
z = zipfile.ZipFile("test.zip", "w")  # 压缩到当前目录,文件名为 test.zip
z.write("a.txt")  # 添加 a.txt到压缩文件
z.write("b.txt")
z.write("c.txt")
z.close()
import zipfile

# 解压缩
z = zipfile.ZipFile("test.zip", "r")
z.extractall(path="./aaa")  # 解压到当前目录下的aaa目录,没有aaa会自动创建
z.close()

tarfile压缩&解压缩

import tarfile

# 压缩
t = tarfile.open("E:\\model.tar", "w")  # 压缩到E盘下,文件名为model.tar
t.add("a.txt", arcname="a.txt.bak")  # 添加a.txt到压缩文件,并重命名为a.txt.bak
t.add("b.txt")  # 添加b.txt到压缩文件,不改变文件名
t.close()
import tarfile

# 解压缩
t = tarfile.open("E:\\model.tar", "r")
t.extractall("E:\\test2")  # 解压到E盘下test2目录
t.close()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

发表评论

验证码加载中....