Xóa thư mục trong python | Laptrinhcanban.com

Xóa thư mục trong python

Hướng dẫn cách xóa thư mục trong python. Bạn sẽ học được cách xóa thư mục trong python, cách xóa thư mục rỗng Python, cách xóa đệ quy các thư mục rỗng Python, bằng các phương pháp như sử dụng hàm shutil.rmtree(), hàm os.rmdir(), hàm os.removedirs() hay phương thức Path.rmdir() sau bài học này.

Xóa thư mục trong python | shutil.rmtree()

Để xóa một thư mục cũng như toàn bộ file và thư mục con chứa trong nó, chúng ta sử dụng hàm shutil.rmtree() tích hợp trong module shutil, với cú pháp sau đây:

shutil.rmtree(path, ignore_errors=False, onerror=None)

Thông thường chúng ta lược bỏ phần lớn các đối số và sử dụng cách viết rút gọn sau:

shutil.rmtree(path)

Trong đó `path` là thư mục cần xóa. Ví dụ, chúng ta có một thư mục cấu trúc như sau:
  |data/
  |--dir1
  |  |
  |  |--user.txt
  |
  |--dir2
  |
  |--delete_folder.py

Để xóa thư mục dir1 cùng toàn bộ file và thư mục con chứa trong nó, ở trên, chúng ta viết:

import shutil

path = './dir1'
shutil.rmtree(path)

Kết quả, thư mục dir1 cùng toàn bộ file và thư mục con sẽ bị xóa như sau:

  |data/
  |--dir2
  |
  |--delete_folder.py

Lưu ý, hàm shutil.rmtree() chỉ dùng để xóa thư mục trong python. Nếu chỉ định path là đường dẫn của một file, lỗi sau sẽ xảy ra:

NotADirectoryError: [WinError 267]  the directory name is invalid

Để xóa file trong python, hãy tham khảo bài viết Xóa file trong python.

Xóa thư mục rỗng Python | os.rmdir()

Trong trường hợp muốn xóa thư mục rỗng trong Python, ngoài cách dùng hàm shutil.rmtree() ở trên, chúng ta cũng có thể dùng hàm os.rmdir() tích hợp trong module os, với cú pháp sau đây:

os.rmdir(path, *, dir_fd=None)

Thông thường chúng ta lược bỏ phần lớn các đối số và sử dụng cách viết rút gọn sau:

os.rmdir(path)

Trong đó path là thư mục rỗng cần xóa.
Ví dụ, chúng ta có một thư mục như sau:

  |data/
  |--dir1
  |  |
  |  |--user.txt
  |
  |--dir2
  |
  |--delete_folder.py

Để xóa thư mục rỗng dir2 ở trên, chúng ta viết:

import os

path = './dir2'
os.rmdir(path)

Nếu như thư mục muốn xóa không phải là thư mục rỗng, lỗi OSError sẽ bị xảy ra. Ví dụ, chúng ta cố xóa thư mục dir1 không phải là thư mục rỗng:

import os

path = './dir1'
os.rmdir(path)
# OSError: [WinError 145] The directory is not empty

Lưu ý, giống như hàm shutil.rmtree(), hàm os.rmdir() cũng chỉ dùng để xóa thư mục trong python. Nếu chỉ định path là đường dẫn của một file, lỗi sau sẽ xảy ra:

NotADirectoryError: [WinError 267]  the directory name is invalid

Để xóa file trong python, hãy tham khảo bài viết Xóa file trong python.

Xóa thư mục rỗng Python | Path.rmdir()

Ngoài cách dùng hàm os.rmdir() để xóa thư mục rỗng trong Python, chúng ta cũng có thể dùng phương thức Path.rmdir() trong module pathlib để xóa một thư mục rỗng, với cú pháp sau đây:

Path.rmdir()

Trong đó Path là một path object - một instance được tạo ra từ class pathlib.Path() chứa thông tin đường dẫn thư mục cần xóa.
Cách sử dụng như ví dụ sau:

import pathlib

path=pathlib.Path('./dir2')
path.rmdir()

Nếu thư mục cần xóa không phải là thư mục rỗng, lỗi WinError sẽ xảy ra:

OSError: [WinError 145] The directory is not empty

Để tránh lỗi này, chúng ta có thể kết hợp lệnh Kiểm tra tồn tại của thư mục trong python kèm lệnh pass là xong:

try:
os.rmdir('temp/dir_not_empty/')
except OSError as e:
pass

Cuối cùng, nếu đường dẫn cần xóa không phải là thư mục mà là một file, lỗi NotADirectoryErrorsẽ xảy ra:

NotADirectoryError: [WinError 267]  the directory name is invalid

Để xóa file trong python, hãy tham khảo bài viết Xóa file trong python.

Xóa đệ quy các thư mục rỗng Python | os.removedirs()

Chúng ta có thể tiến hành xóa đệ quy tất cả các thư mục rỗng chứa trong một đường dẫn trong python, bằng cách sử dụng hàm os.removedirs() với cú pháp sau:

os.removedirs(path)

Hàm os.removedirs() sẽ tiến hành xóa tất cả các thư mục rỗng từ thư mục đầu cuối lên đầu, cho tới khi xuất hiện một thư mục không rỗng.
Và nếu thư mục cuối không phải là thư mục rỗng, lỗi OSError sẽ xảy ra.

Ví dụ, chúng ta có một thư mục cấu trúc như sau:

  |data/
  |--dir1
  |     |--dir2
  |     |     |-- dir3
  |     |     |     |-- dir4 
  |  |--user.txt
  |
  |--delete_folder.py

Chúng ta dùng chương trình sau để xóa đệ quy tất cả các thư mục rỗng có trong thư mục dir1 như sau:

import os
path = './dir1/dir2/dir3/dir4'

os.removedirs(path)

Khi chạy lệnh, hàm sẽ tiến hành xóa theo thứ tự dir4 => dir3 => dir2, cho tới khi xuất hiện thư mục không rỗng dir1.

Kết quả:

  |data/
  |--dir1
  |  |--user.txt
  |
  |--delete_folder.py

Giả sử nếu trong thư mục dir4 có chứa file kiyoshi.txt và thư mục này không rỗng, khi chạy hàm os.removedirs(), lỗi sẽ xảy ra:

OSError: [WinError 145] The directory is not empty

Làm rỗng thư mục Python

Để làm rỗng thư mục trong Python, chúng ta chỉ cần xóa thư mục đó, sau đó tạo mới một thư mục cùng tên là xong. Ví dụ:

import os
import shutil

path = './dir1'

shutil.rmtree(path)
os.makedirs(path, exist_ok=True)

Trong trường hợp bạn muỗn giữ lại thư mục đó, bạn chỉ cần xóa toàn bộ file và thư mục con trong đó với các dòng lệnh sau đây:

import os
import shutil

path = './dir1'

for i in os.listdir(path):
t=os.path.join(path,t)
try:
shutil.rmtree(t);
except:
os.remove(t)

Ở trên, chúng ta đã Lấy danh sách tên file và thư mục chứa trong thư mục cần xóa, sau đó dùng lệnh Nối đường dẫn trong python để tạo đường dẫn cho các file và thư mục con này. Lúc này, chúng ta tiến hành xóa đường dẫn vừa tạo, nếu đường dẫn đó là file thì dùng lệnh Xóa file trong python và nếu là folder thì dùng lệnh xóa folder trong python mà Kiyoshi đã hướng dẫn ở trên.

Rất là đơn giản phải không nào?

Tổng kết và thực hành

Trên đây Kiyoshi đã hướng dẫn bạn về cách xóa thư mục trong python rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về python trong các bài học tiếp theo.

HOME>> >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.