CodeGym /Các khóa học /Python SELF VI /Làm việc với thư mục

Làm việc với thư mục

Python SELF VI
Mức độ , Bài học
Có sẵn

7.1 Các thao tác cơ bản

Bạn đã học cách làm việc với tập tin, giờ hãy cùng làm việc với thư mục. Đôi khi điều này giống với làm việc với tập tin, đôi khi không. Thư mục có những đặc thù riêng. Các chức năng chính để làm việc với thư mục được cung cấp bởi các mô-đun osshutil.

Các thao tác chính với thư mục:

Tạo thư mục

Để tạo thư mục mới, sử dụng hàm os.mkdir().

Ví dụ:


import os

# Tạo thư mục mới
os.mkdir('new_directory')
print("Thư mục 'new_directory' đã được tạo")

Tạo nhiều thư mục lồng nhau

Để tạo nhiều thư mục lồng nhau, sử dụng hàm os.makedirs().

Ví dụ:


import os

# Tạo nhiều thư mục lồng nhau
os.makedirs('parent_directory/child_directory')
print("Các thư mục lồng nhau 'parent_directory/child_directory' đã được tạo")

Xóa thư mục

Để xóa thư mục trống, sử dụng hàm os.rmdir(). Để xóa thư mục cùng với nội dung của nó, sử dụng hàm shutil.rmtree().

Ví dụ:


import os

# Xóa thư mục trống
os.rmdir('new_directory')
print("Thư mục 'new_directory' đã bị xóa")

Ví dụ xóa thư mục cùng với nội dung:


import shutil

# Xóa thư mục cùng với nội dung
shutil.rmtree('parent_directory')
print("Thư mục 'parent_directory' và tất cả nội dung đã bị xóa")

Quan trọng! Đừng bao giờ xóa thư mục cùng với toàn bộ nội dung của nó. Một trong 10 lần sẽ có lỗi trong chương trình của bạn, và bạn sẽ xóa một nửa tập tin trên ổ cứng. Ai cũng từng trải qua điều này. Đừng bao giờ làm như vậy.

Khuyên bạn nên kiểm tra sự tồn tại của thư mục trước khi xóa nó bằng cách sử dụng hàm os.path.exists(). Điều này có thể ngăn ngừa các lỗi liên quan đến việc xóa thư mục không tồn tại hoặc đường dẫn không đúng.

Ví dụ:


import os
import shutil

# Kiểm tra sự tồn tại của thư mục trước khi xóa
directory_path = 'parent_directory'
if os.path.exists(directory_path):
    shutil.rmtree(directory_path)
    print(f"Thư mục '{directory_path}' và tất cả nội dung đã bị xóa")
else:
    print(f"Thư mục '{directory_path}' không tồn tại, không thể xóa")

7.2 Sao chép thư mục

Di chuyển và đổi tên thư mục

Để di chuyển hoặc đổi tên thư mục, sử dụng hàm os.rename().


import os

# Tạo thư mục ví dụ
os.mkdir('original_directory')

# Đổi tên thư mục
os.rename('original_directory', 'renamed_directory')
print("Thư mục 'original_directory' đã được đổi tên thành 'renamed_directory'") 

Sao chép thư mục

Để sao chép thư mục, sử dụng hàm shutil.copytree(). Hàm này không chỉ sao chép nội dung của thư mục mà còn tạo thư mục mới tại đường dẫn đích đã chỉ định.


import os
import shutil

# Tạo thư mục ví dụ
os.mkdir('source_directory')

# Sao chép thư mục
shutil.copytree('source_directory', 'destination_directory')
print("Thư mục 'source_directory' đã được sao chép vào 'destination_directory'")

7.3 Thư mục hiện tại

Mỗi chương trình đang chạy đều có khái niệm như "thư mục làm việc hiện tại". Thường thì đó là thư mục mà chương trình được khởi động và nơi nó tìm kiếm các tập tin cần thiết. Ví dụ, tất cả các tập tin có đường dẫn được đặt mà không có tên thư mục sẽ được tìm kiếm trong thư mục hiện tại.

Lấy thư mục làm việc hiện tại

Để lấy thư mục làm việc hiện tại, sử dụng hàm os.getcwd().


import os

# Lấy thư mục làm việc hiện tại
current_directory = os.getcwd()
print(f"Thư mục làm việc hiện tại: {current_directory}")

Thay đổi thư mục làm việc hiện tại

Để thay đổi thư mục làm việc hiện tại, sử dụng hàm os.chdir().


import os

# Thay đổi thư mục làm việc hiện tại
os.chdir('new_directory')
print(f"Thư mục làm việc hiện tại đã được thay đổi thành: {os.getcwd()}")

Thay đổi thư mục làm việc hiện tại có thể ảnh hưởng đến các đường dẫn tới tập tin, được chỉ định tương đối với thư mục hiện tại. Hãy cẩn thận khi thay đổi thư mục, vì điều này có thể dẫn đến lỗi nếu chương trình mong đợi tập tin trong thư mục gốc.

Kiểm tra sự tồn tại của thư mục

Để kiểm tra sự tồn tại của thư mục, sử dụng hàm os.path.exists().


import os

# Kiểm tra sự tồn tại của thư mục
directory_path = 'new_directory'
if os.path.exists(directory_path):
    print(f"Thư mục '{directory_path}' tồn tại")
else:
    print(f"Thư mục '{directory_path}' không tồn tại")

Lấy đường dẫn tuyệt đối của thư mục

Để lấy đường dẫn tuyệt đối, sử dụng hàm os.path.abspath().


import os

# Lấy đường dẫn tuyệt đối của thư mục
relative_path = 'example_directory'
absolute_path = os.path.abspath(relative_path)
print(f"Đường dẫn tuyệt đối: {absolute_path}")

7.4 Nội dung của thư mục

Lấy danh sách tập tin và thư mục

Để lấy danh sách tập tin và thư mục trong thư mục chỉ định, sử dụng hàm os.listdir().


import os

# Lấy danh sách tập tin và thư mục trong thư mục hiện tại
contents = os.listdir('.')
print(f"Nội dung của thư mục hiện tại: {contents}")

Có thể làm việc với tập tin và thư mục không như các danh sách đường dẫn, mà như các đối tượng phức tạp hơn.

Lấy thông tin về nội dung của thư mục sử dụng os.scandir()

Hàm os.scandir() trả về một iterator, phát ra các đối tượng DirEntry cho mỗi mục trong thư mục. Các đối tượng này chứa thông tin về tập tin và thư mục, làm cho việc sử dụng chúng hiệu quả hơn so với os.listdir(), đặc biệt là đối với các thư mục lớn.


import os

# Lấy thông tin về nội dung của thư mục
with os.scandir('.') as entries:
    for entry in entries:
        print(f"Tên: {entry.name}, Đây là thư mục: {entry.is_dir()}, Đây là tập tin: {entry.is_file()}")
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION