Python shutil模块文件操作详解:复制、移动与删除
本文详细介绍Python标准库shutil模块的核心文件操作功能。涵盖shutil.copy()单文件复制、shutil.copytree()整文件夹备份、shutil.move()文件移动与重命名,以及结合os模块实现的永久删除操作。通过具体代码示例解析各函数的参数行为、返回值及常见错误处理,帮助开发者掌握高效的文件管理技巧。
shutil模块简介
介绍
shutil 模块名称源自 shell utilities,熟悉 Linux 系统的读者对此并不陌生,这有助于记忆模块名。该模块提供了丰富的文件和目录操作功能,包括复制、移动、重命名和删除等。
文件复制:shutil.copy与copytree
一、shutil.copy(source, destination)
shutil.copy() 函数用于实现文件复制,将 source 指定的源文件复制到 destination 指定的目标文件夹中,两个参数均需为字符串格式。若 destination 指定的是文件名,则该名称将作为复制后文件的名称,相当于执行了复制并重命名的操作。
具体示例如下:
>> import shutil
>> import os
>> os.chdir('C:\')
>> shutil.copy('C:\spam.txt', 'C:\delicious')
'C:\delicious\spam.txt'
>> shutil.copy('eggs.txt', 'C:\delicious\eggs2.txt')
'C:\delicious\eggs2.txt'
如代码所示,该函数执行成功后返回复制完成的文件路径字符串。
二、shutil.copytree(source, destination)
shutil.copytree() 函数用于复制整个目录树,将 source 文件夹内的所有内容(包括文件和子文件夹)复制到 destination 中,两个参数均为字符串格式。
注意:如果 destination 指定的文件夹已存在,该操作将抛出 FileExistsError 错误,提示文件已存在。这意味着执行该函数时,程序会自动创建一个新的 destination 文件夹,并将 source 文件夹的内容复制进去。
具体示例如下:
>> import shutil
>> import os
>> os.chdir('C:\')
>> shutil.copytree('C:\bacon', 'C:\bacon_backup')
\'C:\bacon_backup'
如以上代码所示,该函数执行成功后返回复制完成的文件夹的绝对路径字符串。
因此,该函数常被用作数据备份功能。
文件移动与重命名:shutil.move
三、shutil.move(source, destination)
shutil.move() 函数用于将 source 指定的文件或文件夹移动到 destination 中。其返回值是移动后文件的绝对路径字符串。
如果 destination 指向一个已存在的文件夹,source 文件将被移动至该文件夹内,并保持原有文件名。例如:
>> import shutil
>> shutil.move('C:\bacon.txt', 'C:\eggs')
'C:\eggs\bacon.txt'
在上例中,如果 C:\eggs 文件夹中已存在同名文件 bacon.txt,则源文件中的同名文件将覆盖目标文件。
如果 destination 指向一个具体的文件名,则 source 文件将被移动并重命名为该文件名,如下所示:
>> shutil.move('C:\bacon.txt', 'C:\eggs\new_bacon.txt')
'C:\eggs\new_bacon.txt'
这相当于执行了移动加重命名的操作。
<b>注意,如果 destination 是一个文件夹路径(即不带文件后缀的路径名),那么 source 文件将被移动并重命名为 destination 指定的名称</b>,如下所示:
>> shutil.move('C:\bacon.txt', 'C:\eggs')
'C:\eggs'
即 bacon.txt 文件被重命名为 eggs,且新文件没有扩展名。
最后,destination 指定的目标文件夹必须已经存在,否则会引发异常:
>> shutil.move('spam.txt', 'C:\does_not_exist\eggs\ham')
Traceback (most recent call last):
File "D:\Python36\lib\shutil.py", line 538, in move
os.rename(src, real_dst)
FileNotFoundError: [WinError 3] 系统找不到指定的路径。: 'test.txt' -> 'C:\does_not_exist\eggs\ham'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "
永久删除文件与文件夹
四、永久性删除文件和文件夹
此处涉及 os 模块中的相关函数,用于执行不可逆的删除操作。
os.unlink(path) 用于删除 path 路径下的文件。
os.rmdir(path) 用于删除 path 路径下的文件夹,但该文件夹必须是空的,不包含任何文件或子文件夹。
shutil.rmtree(path) 用于删除 path 路径下的文件夹,并递归删除该文件夹内的所有文件和子文件夹。
利用上述函数执行删除操作时需格外谨慎,因为一旦路径拼写错误(例如想删除 txt 文件却误写为 rxt),可能会导致数据丢失。
此时,我们可以利用字符串的 endswith 属性对文件格式进行检查与筛选,以确保操作对象的准确性。
总结
以上就是本文的全部内容,希望这些内容能对您的学习或工作有所帮助。如有任何疑问,欢迎留言交流,感谢支持。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









