Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การลบ Directory Tree ทั้งหมด (Non-empty) ใน Python (shutil.rmtree)

ลบโฟลเดอร์ที่มีไฟล์/ซับโฟลเดอร์อยู่ภายใน (Non-empty Directory) ต้องใช้ shutil.rmtree()

ตัวอย่าง

>> import shutil
>>> shutil.rmtree('my_folder')  # ลบ my_folder และทุกอย่างภายใน

ลบ Empty Directory (โฟลเดอร์ว่าง)

>> import os
>>> os.rmdir('empty_folder')  # ลบได้เฉพาะโฟลเดอร์ว่าง

ความแตกต่าง shutil.rmtree vs os.rmdir

Functionลบ Non-emptyลบ EmptyError ถ้าไม่ว่าง
shutil.rmtree()✓✓ไม่ Error
os.rmdir()✗✓OSError

ตัวเลือก shutil.rmtree

>> # ลบและ ignore errors (permission denied, etc.)
>>> shutil.rmtree('my_folder', ignore_errors=True)

>>> # ใช้ custom error handler
>>> def handle_error(func, path, exc_info):
...     print(f"Error: {func.__name__} on {path}: {exc_info}")
...     # อาจพยายามแก้ไข permission แล้ว retry
...
>>> shutil.rmtree('my_folder', onerror=handle_error)

ความระมัดระวัง

  • ไม่สามารถ Undo ได้ - ข้อมูลหายถาวร
  • ใช้ ignore_errors=True อย่างระมัดระวัง อาจซ่อนปัญหาจริง
  • ทดสอบกับ os.listdir() หรือ shutil.copytree() backup ก่อนลบจริง