shutil 模块:高级文件操作
In [1]:
- import shutil
- import os
shutil
是 Python
中的高级文件操作模块。
复制文件
In [2]:
- with open("test.file", "w") as f:
- pass
- print "test.file" in os.listdir(os.curdir)
- True
shutil.copy(src, dst)
将源文件复制到目标地址:
In [3]:
- shutil.copy("test.file", "test.copy.file")
- print "test.file" in os.listdir(os.curdir)
- print "test.copy.file" in os.listdir(os.curdir)
- True
- True
如果目标地址中间的文件夹不存在则会报错:
In [4]:
- try:
- shutil.copy("test.file", "my_test_dir/test.copy.file")
- except IOError as msg:
- 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
文件夹:
In [5]:
- os.renames("test.file", "test_dir/test.file")
- os.renames("test.copy.file", "test_dir/test.copy.file")
使用 shutil.copytree
来复制文件夹:
In [6]:
- shutil.copytree("test_dir/", "test_dir_copy/")
- "test_dir_copy" in os.listdir(os.curdir)
Out[6]:
- True
删除非空文件夹
os.removedirs
不能删除非空文件夹:
In [7]:
- try:
- os.removedirs("test_dir_copy")
- except Exception as msg:
- print msg
- [Errno 39] Directory not empty: 'test_dir_copy'
使用 shutil.rmtree
来删除非空文件夹:
In [8]:
- shutil.rmtree("test_dir_copy")
移动文件夹
shutil.move
可以整体移动文件夹,与 os.rename
功能差不多。
产生压缩文件
查看支持的压缩文件格式:
In [9]:
- shutil.get_archive_formats()
Out[9]:
- [('bztar', "bzip2'ed tar-file"),
- ('gztar', "gzip'ed tar-file"),
- ('tar', 'uncompressed tar file'),
- ('zip', 'ZIP file')]
产生压缩文件:
shutil.make_archive(basename, format, root_dir)
In [10]:
- shutil.make_archive("test_archive", "zip", "test_dir/")
Out[10]:
- '/home/lijin/notes-python/11. useful tools/test_archive.zip'
清理生成的文件和文件夹:
In [11]:
- os.remove("test_archive.zip")
- shutil.rmtree("test_dir/")