python-shutil

shutil模块

shutil 是高级的文件,文件夹,压缩包处理模块,提供了许多关于文件和文件集合的高级操作,特别提供了支持文件复制和删除的功能。

import shutil

文件和文档操作

shutil.copyfileobj()

将文件内容拷贝到另一个文件中复制对象 fsrc 的内容到 fdst

如果 fdst 不存在则自动创建,length 表示缓冲大小,如果是负数表示直接复制,默认为值为 16*1024

shutil.copyfileobj(fsrc, fdst[, length])
"""
输入参数 
fsrc     源文件  需要打开文件
fdst     复制到文件
length   缓冲
"""
s = open('folder1/fsrc.txt','r')
d = open('folder1/fdst.txt','w')
shutil.copyfileobj(s,d,16*1024)

shutil.copyfile()

拷贝文件
复制文件 src 的内容到 dst 并返回 dst,
如果 dst 不存在则自动创建,

src 和 dst 是字符串类型的路径名,如果 src 和 dst 指向同一个文件,抛出 SameFileError

shutil.copyfile(src, dst,*, follow_symlinks=True)
"""
输入参数
src	 源文件路径
dst 	 拷贝文件路径,相同会报错
不需要打开文件 输入路径
"""
shutil.copyfile('f1.log', 'f2.log')

shutil.copy()

复制文件 src 的内容和权限到 dst,

dst 可以是文件或文件夹,如果是文件,函数的返回值就是 dst,如果是文件夹,函数的返回值就是 src 的文件名与 dst 的路径拼接,src 和 dst 都是字符串类型,如果 dst 指向一个文件夹,则创建与 src 同名的新文件

shutil.copy(src,dst,*,follow_syslink=True)
"""
复制文件和权限
输入参数 
src		 	源文件
dst			新文件或者新路径
返回参数	  新文件路径
"""
# dst 为文件
shutil.copy('folder1/fsrc.txt','folder1/fdst.txt')
#print   >>> 'folder1/fdst.txt'

# dst 为文件夹
shutil.copy('folder1/fsrc.txt', 'tmp/')
# print  >>>  'tmp/folder1/fsrc.txt'

shutil.copy2()

该方法会保留 src 的所有元数据(如创建时间、修改时间等),其他与 copy() 相同,当 follow_symlinks 为 False 且 src 为软链接时,dst 将作为软链接被创建并拷贝 src 的所有元数据到 dst

shutil.copy2(src, dst, \*, follow_symlinks=True)
"""
保留 数据元数据
"""
shutil.copy2('folder1/fsrc.txt','folder1/fdst.txt')

copytree()

递归复制以 src 为根目录的整个目录树,返回目标目录 dst,dst 必须是不存在的目录,它和它不存在的父目录都将被创建,使用 copystat() 复制目录元数据,使用 copy2() 复制文件内容和元数据。

  • symlinks: 是否复制软链接;
  • ignore: 指定不参与复制的文件,使用 ignore_patterns() 方法;
  • copy_function: 指定复制的模式。
shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False)
"""
递归复制以src为根目录的整个目录树,返回目标目录dst
输入参数
src 	 源数据
dst      dst必须是不存在的目录
ignore: 必须是一个可调用对象,

"""


shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns( 'tmp*'))

rmtree()

删除目录,path 必须指定一个目录

使用os.rmdir函数会删除路径指定的文件夹,但是这个文件夹必须是空的,不能包含任何文件或子文件夹;使用shutil.rmtree函数可以删除路径指定的文件夹,并且这个文件夹里面的所有文件和子文件夹都会被删除。

rmtree(path, ignore_errors=False, onerror=None)
"""
path必须指代一个目录(但不能是目录的软链接)。
"""
shutil.rmtree('rm')

shutil.move()

# 移动文件或目录到目标位置
shutil.move(src, dst)

文件状态

shutil.copymode(src, dst)

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

目标文件必须存在

shutil.copymode('f1.log','f2.log')

shutil.copystat(src, dst)

复制src的权限位、最后访问时间、最后修改时间以及标志(flag)

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

shutil.chown()

shutil.chown(*path, user=None, group=None*)
# 更改指定路径的所有者和/或组。

shutil.which()

# 返回 cmd 调用的可执行文件路径,没有返回 None。mode:用于判断文件是否存在或可执行,path:cmd 的查找路径。示例如下:

print(shutil.which('python'))

# 输出结果
# E:\Python3\python.EXE

打包操作

shutil.make_archive()

shutil.make_archive(base_name, format[, root_dir[, base_dir[, verbose[, dry_run[, owner[, group[, logger]]]]]]])
"""
输入参数
base_name:	要创建的归档文件的名称(不包含扩展名),可以包含路径表示归档文件的目标位置
format:		格式(zip, tar, gztar, bztar, xztar)
root_dir:	要压缩的文件夹路径(默认当前目录)
base_dir:	归档文件中所有文件和目录的前缀路径(默认当前目录)
dry_run:	如果为True,不创建归档文件,但是将执行的操作记录在logger中
owner/group:归档文件中所有文件和目录的所属用户和组。如果format为"zip",owner和group的配置不生效
logger:		通常使用logging.Logger对象

"""
# /root/demo/ 归档该目录下的文件和文件夹
# /tmp/shutil/ 生成的归档文件中的所有内容的前缀路径
shutil.make_archive("/root/demo_zip/zipfile", "zip", "/root/demo/", "/tmp/shutil/")
'/root/demo_zip/zipfile.zip'

shutil.unpack_archive()

shutil.unpack_archive(filename, extract_dir=None,format=None)
"""
解压
输入参数

返回参数
"""
# 解压
shutil.unpack_archive(r'C:\mcw\123.zip',r'C:\mcw\temp','zip')

posted @ 2021-06-21 22:27  贝壳里的星海  阅读(324)  评论(0)    收藏  举报