在 Python 中如何复制、移动、改名以及删除文件或文件夹

要实现复制、移动、改名以及删除文件或文件夹,需要用到 shutil 模块,shutil 是 shell util 的简写形式,表示 shell 工具。

1 复制文件或文件夹

调用 shutil.copy(source, destination) 来实现复制文件或文件夹功能,依据 destination 进行区分:

  1. 如果 destination 是文件夹,那么会将路径 source 处的文件复制到路径 destination 处的文件夹。
  2. 如果 destination 是一个文件名,那么会将路径 source 处的文件改为新的名字。
import shutil, os

'''
复制文件夹和文件
'''

os.chdir('F:\\temp')

# 把文件复制到文件夹
path = shutil.copy('F:\\temp\\config.xml', 'F:\\temp\\1')
print('path=', path)

# 把文件复制到文件夹,并改名
path = shutil.copy('F:\\temp\\config.xml', 'F:\\temp\\1\\conf.xml')
print('path=', path)

运行结果:

path= F:\temp\1\config.xml
path= F:\temp\1\conf.xml

注意: 指定复制的文件夹必须存在,否则会抛出 FileNotFoundError。

shutil 的 copytree(source, destination) 方法会复制整个文件夹,包括它所包含的所有文件夹和文件。source
指定源文件夹,destination 指定新的文件夹。source 和 destination 入参都是字符串。该函数会返回新文件夹的路径。destination 如果不存在,会自动创建。请看下例:

# 复制整个文件夹
path = shutil.copytree('F:\\temp\\1', 'F:\\temp\\1_backup')
print('path=', path)

运行结果:

path= F:\temp\1_backup

2 移动文件或文件夹

shutil.move(source, destination) 方法会将路径 source 处的文件移动到路径 destination,并返回新位置的绝对路径的字符串。
如果 destination 指向一个文件夹, source 处的文件将移动到 destination 中, 并保持原来的文件名。

import shutil

'''
移动文件或文件夹
'''
# 移动文件
path = shutil.move('F:\\temp\\bird2.log','F:\\temp\\conf')
print('path=', path)

# 移动文件夹
path = shutil.move('F:\\temp\\python', 'F:\\temp\\conf')
print('path=', path)

运行结果:

path= F:\temp\conf\bird2.log
path= F:\temp\conf\python

注意:

  1. 如果在 destination 中原来已经存在了一个同名文件(与 source 相同),那么这个文件就会被覆写。
  2. 如果 destination 文件夹不存在,那么 shutil 就会新建一个 destination 文件,这一点容易造成困扰。

3 永久删除文件或文件夹

os 模块中的函数,可以实现删除一个文件或一个空文件夹。而 shutil 更强大,使用它可以删除一个非空文件夹!

方法 说明
os.unlink(path) 删除 path 处的文件。
os.rmdir(path) 删除 path 处的文件夹,这个文件夹必须是空的文件夹。
shutil.rmtree(path) 删除 path 处的文件夹,这个文件夹内所包含的所有文件和文件夹都会被删除。

注意: 因为是永久删除,所以使用这些函数一定要小心!建议调试程序时, 先注释掉这些删除方法,
然后加上 print(), 把要被删除的文件打印出来,确认后,再执行。

import os

'''
永久删除文件和文件夹
'''
os.chdir('F:\\temp\\conf\\')

for filename in os.listdir():
    if filename.endswith('.log'):
        print(filename)
        #os.unlink(filename)

打印出来的文件列表确认无误后,再执行 os.unlink(filename) 执行删除操作。

4 安全删除文件或文件夹

send2trash 模块会将文件夹或文件发送到计算机的回收站。首先,安装它:

pip install send2trash

安装成功后,调用 send2trash.send2trash 方法,就可以把文件夹或文件发送到计算机的回收站。请看下例:

import os
import send2trash

'''
将文件夹或文件发送到计算机的回收站
'''
os.chdir('F:\\temp\\conf\\')

send2trash.send2trash('python')

建议使用 send2trash.send2trash() 函数来删除文件或文件夹,因为以后还可以从回收站还原。但这样做,不
会释放磁盘空间。如果我们还是希望程序释放磁盘空间, 就要用 os 和 shutil 来删除文件和
文件夹(记得使用之前提出的 print 技巧)。还有一点需要注意, send2trash() 函数只能将文件送到回收站, 但不能从回收站中恢复文件。

发表评论