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')

浙公网安备 33010602011771号