当前位置:嗨网首页>书籍在线阅读

04-文件和文件夹的移动与重命名

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

10.1.2 文件和文件夹的移动与重命名

调用 shutil.move(source, destination) ,将路径 source 处的文件夹移动到路径 destination ,并返回新位置的绝对路径的字符串。

如果 destination 指向一个文件夹,那么 source 文件将移动到 destination 中,并保持原来的文件名。例如,在交互式环境中输入以下代码:

>>> import shutil
>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs\\bacon.txt'

假定在C:\目录中已存在一个名为eggs的文件夹,调用 shutil.move() 方法就是将C:\bacon.txt移动到文件夹C:\eggs中。

如果在C:\eggs中已经存在一个文件bacon.txt,那么它就会被覆盖。因为用这种方式很容易不小心覆盖文件,所以在使用 move() 时应该注意。

destination 路径也可以指定一个文件名。在下面的例子中, source 文件被移动并重命名:

>>> shutil.move('C:\\bacon.txt', 'C:\\eggs\\new_bacon.txt')
'C:\\eggs\\new_bacon.txt'

这一行是说将C:\bacon.txt移动到文件夹C:\eggs,完成之后,将bacon.txt文件重命名为new_bacon.txt。

前面两个例子都假设在C:\目录下有一个文件夹eggs。但是如果没有eggs文件夹,那么 move() 就会将bacon.txt重命名,变成名为eggs的文件:

>>> shutil.move('C:\\bacon.txt', 'C:\\eggs')
'C:\\eggs'

这里, move() 在C:\目录下找不到名为eggs的文件夹,因此假定 destination 指的是一个文件,而不是文件夹。bacon.txt文本文件会被重命名为eggs(没有.txt文件扩展名的文本文件),但这可能不是你所希望的。这可能是程序中很难发现的bug,因为 move() 调用会自动地做一些事情,但和你所期望的完全不同。这也是使用 move() 要小心的另一个理由。

最后,构成目的地的各层级目录必须已经存在,否则Python会抛出异常。在交互式环境中输入以下代码:

>>> shutil.move('spam.txt', 'c:\\does_not_exist\\eggs\\ham')
Traceback (most recent call last):
  --snip--
FileNotFoundError: [Errno 2] No such file or directory: 'c:\\does_not_exist\\
eggs\\ham'

Python在does_not_exist目录中寻找eggs和ham。它没有找到这个不存在的目录,因此不能将spam.txt移动到指定的路径。