首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >用shutil模块轻松搞定文件操作

用shutil模块轻松搞定文件操作

作者头像
Crossin先生
发布2026-03-11 21:54:37
发布2026-03-11 21:54:37
460
举报

你是否曾为整理电脑上乱七八糟的文件头疼?手动复制、移动文件夹,或者打包备份资料,是不是感觉像在做“体力活”?好在我们有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文件夹

代码语言:javascript
复制
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项目文件夹

代码语言:javascript
复制
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文件夹

代码语言:javascript
复制
import shutil

shutil.move("downloads/vacation.jpg", "photos/vacation.jpg")

这个效果和copy类似,区别是会删掉原始文件。

2.4 磁盘空间:心中有数

复制大文件前,担心硬盘空间不够?shutil能帮你查:

  • shutil.disk_usage(path):返回磁盘的总空间、已用空间和剩余空间。

代码示例:检查C盘空间够不够存一个10GB的文件

代码语言:javascript
复制
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目录下。

代码示例:打包学习资料并解压

代码语言:javascript
复制
import shutil

# 打包 my_project 文件夹为 zip
shutil.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:

代码语言:javascript
复制
import shutil
import 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文件夹:

代码语言:javascript
复制
import shutil
import 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:清理旧文件,释放空间

硬盘快满了?检查空间并清理旧备份:

代码语言:javascript
复制
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

如果本文对你有帮助,欢迎点赞、评论、转发。你们的支持是我更新的动力~


感谢转发点赞的各位~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-07-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Crossin的编程教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档