Python: Liệt kê và thêm tất cả các tệp từ một thư mục vào danh sách

Python: Liệt kê và thêm tất cả các tệp từ một thư mục vào danh sách
Python

Khám phá quản lý tệp trong Python

Làm việc với các thư mục và tập tin là một công việc phổ biến trong lập trình. Trong Python, có một số phương pháp để liệt kê tất cả các tệp trong một thư mục và lưu trữ chúng trong danh sách để xử lý thêm.

Bài viết này sẽ khám phá những cách hiệu quả để đạt được điều này, cung cấp các ví dụ và giải thích về mã. Cho dù bạn là người mới bắt đầu hay một lập trình viên có kinh nghiệm, những kỹ thuật này sẽ giúp hợp lý hóa các tác vụ quản lý tệp của bạn trong Python.

Yêu cầu Sự miêu tả
os.listdir(directory) Trả về danh sách chứa tên của các mục trong thư mục đã chỉ định.
os.path.isfile(path) Kiểm tra xem đường dẫn đã chỉ định có phải là tệp thông thường hiện có hay không.
os.path.join(path, *paths) Tham gia một hoặc nhiều thành phần đường dẫn một cách thông minh, trả về một đường dẫn duy nhất.
Path(directory).iterdir() Trả về một trình vòng lặp của tất cả các tệp và thư mục con trong thư mục đã chỉ định.
file.is_file() Trả về True nếu đường dẫn là một tệp thông thường hoặc một liên kết tượng trưng đến một tệp.
os.walk(directory) Tạo tên tệp trong cây thư mục, đi từ trên xuống hoặc từ dưới lên.

Tìm hiểu về truyền tải thư mục Python

Các tập lệnh được cung cấp ở trên minh họa các phương pháp khác nhau để liệt kê tất cả các tệp trong một thư mục bằng Python. Kịch bản đầu tiên sử dụng os module, là một mô-đun tích hợp trong Python cung cấp cách sử dụng chức năng phụ thuộc vào hệ điều hành. Bằng cách sử dụng os.listdir(directory), chúng ta có thể nhận được danh sách tất cả các mục trong thư mục đã chỉ định. Sau đó, bằng cách lặp qua các mục này và kiểm tra từng mục bằng os.path.isfile(path), chúng tôi có thể lọc ra các thư mục và chỉ nối các tệp vào danh sách của mình. Kịch bản thứ hai sử dụng pathlib mô-đun, cung cấp cách tiếp cận hướng đối tượng hơn cho các đường dẫn hệ thống tập tin. Bằng cách sử dụng Path(directory).iterdir(), chúng tôi nhận được một trình vòng lặp của tất cả các mục trong thư mục và bằng cách lọc chúng bằng file.is_file(), chúng tôi chỉ có thể thu thập các tập tin.

Tập lệnh thứ ba được thiết kế để liệt kê tệp toàn diện hơn, bao gồm các tệp trong thư mục con. Nó sử dụng os.walk(directory), một trình tạo tạo ra một bộ đường dẫn thư mục, thư mục con và tên tệp cho mỗi thư mục trong cây có gốc tại thư mục đã chỉ định. Điều này cho phép chúng ta duyệt cây thư mục một cách đệ quy và thu thập tất cả tên tệp. Các tập lệnh này thể hiện các cách hiệu quả để xử lý việc truyền tải thư mục trong Python, mang lại cả sự đơn giản với os và chức năng nâng cao với pathlib. Hiểu các lệnh và phương thức này là rất quan trọng đối với các tác vụ quản lý tệp, đảm bảo rằng các tệp được xác định và xử lý chính xác trong cấu trúc thư mục.

Liệt kê các tệp trong thư mục bằng mô-đun os của Python

Sử dụng mô-đun os để duyệt thư mục

import os

def list_files_os(directory):
    files = []
    for filename in os.listdir(directory):
        if os.path.isfile(os.path.join(directory, filename)):
            files.append(filename)
    return files

# Example usage
directory_path = '/path/to/directory'
files_list = list_files_os(directory_path)
print(files_list)

Tìm nạp nội dung thư mục bằng mô-đun pathlib của Python

Sử dụng mô-đun pathlib để liệt kê tệp

from pathlib import Path

def list_files_pathlib(directory):
    return [str(file) for file in Path(directory).iterdir() if file.is_file()]

# Example usage
directory_path = '/path/to/directory'
files_list = list_files_pathlib(directory_path)
print(files_list)

Danh sách tệp đệ quy với os.walk

Sử dụng os.walk để duyệt thư mục đệ quy

import os

def list_files_recursive(directory):
    files = []
    for dirpath, _, filenames in os.walk(directory):
        for filename in filenames:
            files.append(os.path.join(dirpath, filename))
    return files

# Example usage
directory_path = '/path/to/directory'
files_list = list_files_recursive(directory_path)
print(files_list)

Kỹ thuật liệt kê tệp nâng cao trong Python

Ngoài các phương pháp cơ bản để liệt kê các tập tin trong một thư mục bằng cách sử dụng ospathlib mô-đun, có nhiều kỹ thuật nâng cao hơn có thể được sử dụng cho các nhiệm vụ chuyên biệt. Một phương pháp như vậy là sử dụng glob mô-đun, tìm tất cả các tên đường dẫn khớp với một mẫu đã chỉ định theo các quy tắc được sử dụng bởi shell Unix. Điều này có thể đặc biệt hữu ích khi liệt kê các tệp có phần mở rộng hoặc mẫu cụ thể. Ví dụ, sử dụng glob.glob('*.txt') sẽ liệt kê tất cả các tập tin văn bản trong thư mục hiện tại. Phương pháp này cung cấp một cách linh hoạt để lọc các tệp dựa trên tên hoặc phần mở rộng của chúng mà không cần phải lặp lại thủ công qua các mục nhập thư mục.

Một kỹ thuật tiên tiến khác là tận dụng fnmatch mô-đun, cung cấp các chức năng để so sánh tên tệp với các mẫu toàn cầu kiểu Unix. Điều này có thể được sử dụng kết hợp với os.listdir() hoặc pathlib để lọc các tập tin dựa trên các mẫu phức tạp hơn. Ví dụ, fnmatch.filter(os.listdir(directory), '*.py') sẽ trả về danh sách tất cả các tệp Python trong thư mục đã chỉ định. Ngoài ra, đối với các tập dữ liệu lớn hơn hoặc các ứng dụng quan trọng về hiệu năng, việc sử dụng scandir từ os mô-đun có thể hiệu quả hơn listdir vì nó truy xuất các thuộc tính tệp cùng với tên tệp, làm giảm số lượng lệnh gọi hệ thống. Việc hiểu các kỹ thuật nâng cao này cho phép tạo ra các giải pháp quản lý tệp linh hoạt và mạnh mẽ hơn trong Python.

Câu hỏi thường gặp về Danh sách thư mục trong Python

  1. Làm cách nào để liệt kê tất cả các tệp trong một thư mục và các thư mục con của nó?
  2. Sử dụng os.walk(directory) duyệt cây thư mục và liệt kê tất cả các tập tin.
  3. Làm cách nào tôi có thể liệt kê các tệp có phần mở rộng cụ thể?
  4. Sử dụng glob.glob('*.extension') hoặc fnmatch.filter(os.listdir(directory), '*.extension').
  5. Sự khác biệt giữa os.listdir()os.scandir()?
  6. os.scandir() hiệu quả hơn vì nó truy xuất các thuộc tính tệp cùng với tên tệp.
  7. Tôi có thể liệt kê các tập tin ẩn trong một thư mục không?
  8. Có, sử dụng os.listdir() sẽ liệt kê các tập tin ẩn (những tập tin bắt đầu bằng dấu chấm).
  9. Làm cách nào để loại trừ các thư mục khỏi danh sách?
  10. Sử dụng os.path.isfile() hoặc file.is_file() với pathlib để chỉ lọc các tập tin.
  11. Có thể sắp xếp danh sách các tập tin?
  12. Có, bạn có thể sử dụng sorted() chức năng trên danh sách các tập tin.
  13. Làm cách nào tôi có thể xử lý các thư mục lớn một cách hiệu quả?
  14. Sử dụng os.scandir() để có hiệu suất tốt hơn với các thư mục lớn.
  15. Tôi có thể lấy kích thước tập tin và ngày sửa đổi không?
  16. Có, sử dụng os.stat() hoặc Path(file).stat() để lấy siêu dữ liệu tập tin.
  17. Những mô-đun nào là tốt nhất để tương thích đa nền tảng?
  18. Các pathlib module được khuyến nghị để có khả năng tương thích đa nền tảng tốt hơn.
  19. Làm cách nào để chỉ liệt kê các thư mục?
  20. Sử dụng os.path.isdir() hoặc Path(file).is_dir() để lọc thư mục.

Kết thúc danh sách thư mục trong Python

Tóm lại, Python cung cấp nhiều cách để liệt kê các tệp trong một thư mục, từ các phương thức cơ bản bằng cách sử dụng ospathlib mô-đun đến các kỹ thuật nâng cao hơn liên quan đến globfnmatch. Mỗi phương pháp đều có những ưu điểm riêng, phù hợp với những trường hợp sử dụng khác nhau. Hiểu các kỹ thuật này sẽ nâng cao khả năng xử lý các tác vụ quản lý tệp một cách hiệu quả, đảm bảo rằng bạn có thể liệt kê và xử lý chính xác các tệp theo yêu cầu của ứng dụng.