# 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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。