您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Python中shutil模块怎么使用
## 一、shutil模块简介
`shutil`(shell utility)是Python标准库中用于高级文件操作的模块,提供了对文件和文件夹的复制、移动、删除等操作。与`os`模块相比,`shutil`提供了更高层次的文件操作接口,特别适合处理文件和目录的批量操作。
## 二、常用功能概览
| 功能分类 | 主要方法 |
|----------------|----------------------------|
| 文件复制 | `copy()`, `copy2()`, `copyfile()` |
| 目录操作 | `copytree()`, `rmtree()` |
| 文件移动/重命名| `move()` |
| 归档压缩 | `make_archive()`, `unpack_archive()` |
## 三、文件复制操作
### 1. 基础文件复制
```python
import shutil
# 复制文件内容(不保留元数据)
shutil.copy('source.txt', 'destination.txt')
# 复制文件并保留元数据(如修改时间)
shutil.copy2('source.txt', 'destination.txt')
# 仅复制文件内容(必须指定目标文件名)
shutil.copyfile('source.txt', 'dest_folder/new_name.txt')
区别对比:
- copy()
: 复制内容+部分权限
- copy2()
: 复制内容+完整元数据
- copyfile()
: 仅复制内容
# 递归复制整个目录树
shutil.copytree('src_dir', 'dst_dir')
# 忽略特定文件类型
def ignore_pyc(dirname, filenames):
return [name for name in filenames if name.endswith('.pyc')]
shutil.copytree('src', 'dst', ignore=ignore_pyc)
# 移动文件(可用于重命名)
shutil.move('old_location.txt', 'new_folder/new_name.txt')
# 移动目录
shutil.move('old_dir', 'new_parent_dir/renamed_dir')
# 递归删除整个目录(危险操作!)
shutil.rmtree('directory_to_delete')
# 安全删除(Python 3.12+)
shutil.rmtree('dir', onexc=handle_errors)
# 创建zip/tar归档
shutil.make_archive(
'archive_name',
'zip', # 格式:zip/tar/gztar等
'root_dir' # 要归档的目录
)
shutil.unpack_archive('package.zip', 'extract_dir')
def custom_copy(src, dst):
print(f"Copying {src} to {dst}")
return shutil.copy2(src, dst)
shutil.copy2 = custom_copy
total, used, free = shutil.disk_usage('/')
print(f"Free space: {free // (2**30)} GB")
import errno
try:
shutil.copytree('src', 'dst')
except shutil.Error as e:
print(f"Directory not copied: {e}")
except OSError as e:
if e.errno == errno.ENOSPC:
print("Disk full!")
大文件处理:对于超大文件,建议使用copyfileobj()
分块复制
with open('bigfile.iso', 'rb') as src:
with open('copy.iso', 'wb') as dst:
shutil.copyfileobj(src, dst, length=16*1024) # 16KB块
选择性复制:使用ignore
参数避免复制不必要的文件
跨设备操作:移动文件时注意不同文件系统的处理
import datetime
def backup_project(project_path):
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M")
backup_name = f"backup_{timestamp}.zip"
shutil.make_archive(backup_name[:-4], 'zip', project_path)
print(f"Backup created: {backup_name}")
def clean_temp(temp_dir, days=7):
cutoff = time.time() - days * 86400
for filename in os.listdir(temp_dir):
filepath = os.path.join(temp_dir, filename)
if os.path.getmtime(filepath) < cutoff:
if os.path.isfile(filepath):
os.remove(filepath)
else:
shutil.rmtree(filepath)
copy(..., follow_symlinks=False)
修改shutil模块作为Python文件操作的”瑞士军刀”,提供了: - 简洁的高级文件操作API - 完整的目录树处理能力 - 跨平台兼容性 - 与os模块的良好互补
掌握shutil能显著提升文件处理效率,但需注意其不可逆操作的风险,建议重要操作前先进行测试。
官方文档推荐:
Python shutil文档 “`
注:本文实际约1600字,完整版可扩展以下内容: 1. 更多异常处理示例 2. 与pathlib的结合使用 3. 性能基准测试数据 4. 特殊文件系统(如网络存储)的处理
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。