shutil 模块:高级文件操作¶

In [1]:

  1. import shutil
  2. import os

shutilPython 中的高级文件操作模块。

复制文件¶

In [2]:

  1. with open("test.file", "w") as f:
  2. pass
  3.  
  4. print "test.file" in os.listdir(os.curdir)
  1. True

shutil.copy(src, dst) 将源文件复制到目标地址:

In [3]:

  1. shutil.copy("test.file", "test.copy.file")
  2.  
  3. print "test.file" in os.listdir(os.curdir)
  4. print "test.copy.file" in os.listdir(os.curdir)
  1. True
  2. True

如果目标地址中间的文件夹不存在则会报错:

In [4]:

  1. try:
  2. shutil.copy("test.file", "my_test_dir/test.copy.file")
  3. except IOError as msg:
  4. print msg
  1. [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]:

  1. os.renames("test.file", "test_dir/test.file")
  2. os.renames("test.copy.file", "test_dir/test.copy.file")

使用 shutil.copytree 来复制文件夹:

In [6]:

  1. shutil.copytree("test_dir/", "test_dir_copy/")
  2.  
  3. "test_dir_copy" in os.listdir(os.curdir)

Out[6]:

  1. True

删除非空文件夹¶

os.removedirs 不能删除非空文件夹:

In [7]:

  1. try:
  2. os.removedirs("test_dir_copy")
  3. except Exception as msg:
  4. print msg
  1. [Errno 39] Directory not empty: 'test_dir_copy'

使用 shutil.rmtree 来删除非空文件夹:

In [8]:

  1. shutil.rmtree("test_dir_copy")

移动文件夹¶

shutil.move 可以整体移动文件夹,与 os.rename 功能差不多。

产生压缩文件¶

查看支持的压缩文件格式:

In [9]:

  1. shutil.get_archive_formats()

Out[9]:

  1. [('bztar', "bzip2'ed tar-file"),
  2. ('gztar', "gzip'ed tar-file"),
  3. ('tar', 'uncompressed tar file'),
  4. ('zip', 'ZIP file')]

产生压缩文件:

shutil.make_archive(basename, format, root_dir)

In [10]:

  1. shutil.make_archive("test_archive", "zip", "test_dir/")

Out[10]:

  1. '/home/lijin/notes-python/11. useful tools/test_archive.zip'

清理生成的文件和文件夹:

In [11]:

  1. os.remove("test_archive.zip")
  2. shutil.rmtree("test_dir/")

原文: https://nbviewer.jupyter.org/github/lijin-THU/notes-python/blob/master/11-useful-tools/11.05-shutil.ipynb