你是否曾为整理电脑上乱七八糟的文件头疼?手动复制、移动文件夹,或者打包备份资料,是不是感觉像在做“体力活”?好在我们有Python,可以从这些无聊的事务中轻松解放出来。
而shutil模块可谓是Python标准库里的“文件管理神器”,能让文件操作变得像点外卖一样简单。
今天Crossin就带你快速上手shutil,从此告别繁琐的文件操作!
1. Shutil是个啥?简单又强大!
shutil(意为shell utilities)是Python标准库里的一个模块,专门用来处理文件和文件夹的高级操作。相比底层的os模块,shutil就像一个“傻瓜式”工具箱,代码少、效果好,特别适合不想深究底层细节的程序员。
它能干啥?简单来说,shutil能帮你操作电脑上的文件,比如:
复制文件或整个文件夹
移动文件到指定位置
删除文件夹(小心用!)
检查磁盘空间
打包或解压zip文件
最棒的是,shutil是Python自带的,import一下就能用,无需额外安装!接下来,我们来解锁它的主要功能。
2. Shutil的“五大绝招”
2.1 文件复制:一键搞定
想把文件从A地复制到B地?shutil提供了几个超好用的复制函数:
shutil.copy(src, dst):复制文件到目标路径,保留文件的基本信息(如权限)。
shutil.copy2(src, dst):比copy更强,保留文件的“出生日期”(创建时间、修改时间等元数据)。
shutil.copyfile(src, dst):只复制文件内容,不关心元数据,简单粗暴。
代码示例:把照片photo.jpg复制到backup文件夹
import shutil
shutil.copy("photo.jpg", "backup/photo.jpg")# 或者用 copy2 保留更多信息shutil.copy2("photo.jpg", "backup/photo_copy.jpg")
几行代码,照片就安全备份了!如果有一堆文件要处理,显然要比鼠标拖拽快多了。
2.2 目录操作:批量处理省心
处理整个文件夹?shutil也有大招:
shutil.copytree(src, dst):递归复制整个文件夹,包括里面的所有文件和子文件夹。
shutil.rmtree(path):递归删除整个文件夹(注意:这招威力大,用前三思!)。
代码示例:备份你的Python项目文件夹
import shutil
# 复制整个项目到备份目录shutil.copytree("my_project", "backup/my_project_backup")# 如果要删除旧备份(小心!)shutil.rmtree("backup/old_project")
用copytree,整个项目文件夹秒复制,连子文件夹都会完美保留。
2.3 文件移动:拖拽不如代码快
想整理文件,把照片、视频分门别类?shutil.move()是你的好帮手:
shutil.move(src, dst):把文件或文件夹从一个地方“搬”到另一个地方。
代码示例:把下载文件夹里的.jpg文件挪到photos文件夹
import shutil
shutil.move("downloads/vacation.jpg", "photos/vacation.jpg")
这个效果和copy类似,区别是会删掉原始文件。
2.4 磁盘空间:心中有数
复制大文件前,担心硬盘空间不够?shutil能帮你查:
shutil.disk_usage(path):返回磁盘的总空间、已用空间和剩余空间。
代码示例:检查C盘空间够不够存一个10GB的文件
import shutil
total, used, free = shutil.disk_usage("C:/")if free > 10 * 1024 * 1024 * 1024: # 10GB print("空间够用,放心复制!")else: print("硬盘快满了,清理一下吧!")
有了这个,复制大文件就放心多了。
2.5 压缩解压:备份更轻松
想把文件打包成zip,或者解压别人的压缩包?shutil轻松搞定:
shutil.make_archive(base_name, format, root_dir):把文件夹root_dir打包成base_name.zip或tar。
shutil.unpack_archive(filename, extract_dir):解压压缩文件filename到extract_dir目录下。
代码示例:打包学习资料并解压
import shutil
# 打包 my_project 文件夹为 zipshutil.make_archive("my_project_backup", "zip", "my_project")# 解压到指定文件夹shutil.unpack_archive("my_project_backup.zip", "extracted_project")
几行代码,备份和解压so easy!
3. 动手试试:三个实用案例
3.1 案例1:自动备份代码项目
假设你有一个Python项目文件夹my_project,想定期备份并压缩成zip:
import shutilimport datetime
# 备份项目文件夹today = datetime.date.today()backup_dir = f"backup/my_project_{today}"try: shutil.copytree("my_project", backup_dir) # 打包成zip shutil.make_archive(f"backup/project_{today}", "zip", "my_project") print(f"备份完成!文件保存在 {backup_dir} 和 project_{today}.zip")except FileExistsError: print("备份文件夹已存在,换个名字试试!")
3.2 案例2:整理下载文件夹
下载文件夹乱糟糟?我们用shutil.move()把.jpg文件挪到photos文件夹:
import shutilimport os
downloads = "downloads"photos_dir = "photos"os.makedirs(photos_dir, exist_ok=True) # 确保目标文件夹存在
for file in os.listdir(downloads): if file.endswith(".jpg"): shutil.move(os.path.join(downloads, file), os.path.join(photos_dir, file))print("照片整理完成!")
3.3 案例3:清理旧文件,释放空间
硬盘快满了?检查空间并清理旧备份:
import shutil
# 检查磁盘空间total, used, free = shutil.disk_usage(".")print(f"剩余空间: {free // (1024**3)} GB")
# 删除旧备份文件夹try: shutil.rmtree("backup/old_project") print("旧备份已删除,空间解放!")except FileNotFoundError: print("没找到旧备份,跳过清理!")
友情提示:rmtree很危险,删前确认路径正确,避免误删重要文件!
4. shutil常见疑问解答
4.1 问:啥时候用shutil,啥时候用os?
答:用shutil:需要快速复制、移动、删除文件夹,或处理压缩文件时。
用os:需要更细粒度的控制,比如只改文件权限或遍历目录结构。
4.2 问:copy和copy2有啥不一样?
答:copy保留基本元数据(像权限),copy2更强,连文件的创建时间、修改时间都保留。日常用copy2就够了。
4.3 问:大文件夹复制慢怎么办?
答:试试分批复制,或者用rsync(系统命令)提速。shutil适合简单任务,大型任务可以考虑其他工具。
4.4 问:为啥报“权限错误”?
答:可能是目标文件夹无写入权限,或者文件被占用。检查路径,确认文件没被其他程序锁定。
5. 总结
shutil就像Python里的“文件魔法师”,简单几行代码,就能让文件操作变得省心又有趣!从备份项目到整理下载文件夹,它都能帮你省下不少时间。
正因为有了这些非常好用的库,Python才能帮我们轻松搞定各种办公自动化的问题。难怪人们要说:人生苦短,我用Python!
你还有什么想了解的模块,欢迎在评论区留言。
官方文档:Python - shutil模块
https://docs.python.org/zh-cn/3.13/library/shutil.html
如果本文对你有帮助,欢迎点赞、评论、转发。你们的支持是我更新的动力~
购买后可加入读者交流群,Crossin为你开启陪读模式,解答你在阅读本书时的一切疑问。
Crossin的其他书籍:
感谢转发和点赞的各位~