溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中shutil模塊怎么使用

發布時間:2022-01-24 15:38:50 來源:億速云 閱讀:159 作者:zzz 欄目:開發技術
# 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(): 僅復制內容

2. 目錄復制

# 遞歸復制整個目錄樹
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)

四、文件移動與刪除

1. 移動文件/目錄

# 移動文件(可用于重命名)
shutil.move('old_location.txt', 'new_folder/new_name.txt')

# 移動目錄
shutil.move('old_dir', 'new_parent_dir/renamed_dir')

2. 刪除目錄樹

# 遞歸刪除整個目錄(危險操作?。?shutil.rmtree('directory_to_delete')

# 安全刪除(Python 3.12+)
shutil.rmtree('dir', onexc=handle_errors)

五、歸檔與壓縮

1. 創建歸檔文件

# 創建zip/tar歸檔
shutil.make_archive(
    'archive_name', 
    'zip',        # 格式:zip/tar/gztar等
    'root_dir'    # 要歸檔的目錄
)

2. 解壓歸檔文件

shutil.unpack_archive('package.zip', 'extract_dir')

六、高級用法

1. 自定義復制行為

def custom_copy(src, dst):
    print(f"Copying {src} to {dst}")
    return shutil.copy2(src, dst)

shutil.copy2 = custom_copy

2. 磁盤空間檢查

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!")

八、性能優化技巧

  1. 大文件處理:對于超大文件,建議使用copyfileobj()分塊復制

    with open('bigfile.iso', 'rb') as src:
       with open('copy.iso', 'wb') as dst:
           shutil.copyfileobj(src, dst, length=16*1024)  # 16KB塊
    
  2. 選擇性復制:使用ignore參數避免復制不必要的文件

  3. 跨設備操作:移動文件時注意不同文件系統的處理

九、實際應用案例

案例1:備份項目目錄

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}")

案例2:清理臨時文件

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)

十、注意事項

  1. 權限問題:操作可能需要管理員權限
  2. 符號鏈接:默認會跟隨鏈接,可通過copy(..., follow_symlinks=False)修改
  3. 跨平臺差異:Windows和Unix系統路徑處理不同
  4. 資源占用:大目錄操作可能消耗大量內存

十一、總結

shutil模塊作為Python文件操作的”瑞士軍刀”,提供了: - 簡潔的高級文件操作API - 完整的目錄樹處理能力 - 跨平臺兼容性 - 與os模塊的良好互補

掌握shutil能顯著提升文件處理效率,但需注意其不可逆操作的風險,建議重要操作前先進行測試。

官方文檔推薦:
Python shutil文檔 “`

注:本文實際約1600字,完整版可擴展以下內容: 1. 更多異常處理示例 2. 與pathlib的結合使用 3. 性能基準測試數據 4. 特殊文件系統(如網絡存儲)的處理

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女