11.05 shutil 模块:高级文件操作
shutil 模块:高级文件操作
1import shutil
2import os
shutil 是 Python 中的高级文件操作模块。
复制文件
1with open("test.file", "w") as f:
2 pass
3
4print "test.file" in os.listdir(os.curdir)
True
shutil.copy(src, dst) 将源文件复制到目标地址:
1shutil.copy("test.file", "test.copy.file")
2
3print "test.file" in os.listdir(os.curdir)
4print "test.copy.file" in os.listdir(os.curdir)
True
True
如果目标地址中间的文件夹不存在则会报错:
1try:
2 shutil.copy("test.file", "my_test_dir/test.copy.file")
3except IOError as msg:
4 print msg
[Errno 2] No such file or directory: 'my_test_dir/test.copy.file'
另外的一个函数 shutil.copyfile(src, dst) 与 shutil.copy 使用方法一致,不过只是简单复制文件的内容,并不会复制文件本身的读写可执行权限,而 shutil.copy 则是完全复制。
复制文件夹
将文件转移到 test_dir 文件夹:
1os.renames("test.file", "test_dir/test.file")
2os.renames("test.copy.file", "test_dir/test.copy.file")
使用 shutil.copytree 来复制文件夹:
1shutil.copytree("test_dir/", "test_dir_copy/")
2
3"test_dir_copy" in os.listdir(os.curdir)
True
删除非空文件夹
os.removedirs 不能删除非空文件夹:
1try:
2 os.removedirs("test_dir_copy")
3except Exception as msg:
4 print msg
[Errno 39] Directory not empty: 'test_dir_copy'
使用 shutil.rmtree 来删除非空文件夹:
1shutil.rmtree("test_dir_copy")
移动文件夹
shutil.move 可以整体移动文件夹,与 os.rename 功能差不多。
产生压缩文件
查看支持的压缩文件格式:
1shutil.get_archive_formats()
[('bztar', "bzip2'ed tar-file"),
('gztar', "gzip'ed tar-file"),
('tar', 'uncompressed tar file'),
('zip', 'ZIP file')]
产生压缩文件:
shutil.make_archive(basename, format, root_dir)
1shutil.make_archive("test_archive", "zip", "test_dir/")
'/home/lijin/notes-python/11. useful tools/test_archive.zip'
清理生成的文件和文件夹:
1os.remove("test_archive.zip")
2shutil.rmtree("test_dir/")