os模块提供了对目录或者文件的新建/删除/查看文件属性,还提供了对文件以及目录的路径操作。比如说:绝对路径,父目录…… 但是,os文件的操作还应该包含移动 复制 打包 压缩 解压等操作,这些os模块都没有提供。
而本文所讲的shutil则就是对os中文件操作的补充。--移动 复制 打包 压缩 解压,
shutil函数功能:
1 shutil.copyfileobj(fsrc, fdst[, length=16*1024])
copy文件内容到另一个文件,可以copy指定大小的内容
先来看看其源代码。
1 2 3 4 5 6 7 |
|
注意! 在其中fsrc,fdst都是文件对象,都需要打开后才能进行复制操作
1 2 3 4 |
|
2 shutil.copyfile(src,dst)
copy文件内容,是不是感觉上面的文件复制很麻烦?还需要自己手动用open函数打开文件,在这里就不需要了,事实上,copyfile调用了copyfileobj
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
1 2 |
|
3 shutil.copymode(src,dst)
仅copy权限,不更改文件内容,组和用户。
1 2 3 4 5 6 7 8 9 10 11 12 |
|
先看两个文件的权限
1 2 3 4 |
|
运行命令
1 2 |
|
查看结果
1 2 3 4 |
|
当我们将目标文件换为一个不存在的文件时报错
1 2 3 4 5 6 |
|
4 shutil.copystat(src,dst)
复制所有的状态信息,包括权限,组,用户,时间等
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
|
5 shutil.copy(src,dst)
复制文件的内容以及权限,先copyfile后copymode
1 2 3 4 5 6 7 |
|
6 shutil.copy2(src,dst)
复制文件的内容以及文件的所有状态信息。先copyfile后copystat
1 2 3 4 5 6 7 8 9 10 11 12 |
|
7 shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2,ignore_dangling_symlinks=False)
递归的复制文件内容及状态信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
8 shutil.rmtree(path, ignore_errors=False, onerror=None)
递归地删除文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
|
9 shutil.move(src, dst)
递归的移动文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
10 make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0,dry_run=0, owner=None, group=None, logger=None)
压缩打包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
|
base_name: 压缩打包后的文件名或者路径名
format: 压缩或者打包格式 "zip", "tar", "bztar"or "gztar"
root_dir : 将哪个目录或者文件打包(也就是源文件)
1 2 3 4 5 6 7 8 |
|