ลบโฟลเดอร์ที่มีไฟล์/ซับโฟลเดอร์อยู่ภายใน (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 | ลบ Empty | Error ถ้าไม่ว่าง |
|---|---|---|---|
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 ก่อนลบจริง