Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Python liệt kê tệp trong thư mục: Hướng dẫn từng bước

Thư viện os của Python dùng để liệt kê tệp trong thư mục. Phương thức os.listdir() trả về danh sách mọi tệp và thư mục trong một thư mục. Hàm os.walk() trả về danh sách mọi tệp trong toàn bộ cây thư mục.


Thường xuyên, khi bạn làm việc với tệp trong Python, bạn sẽ gặp tình huống muốn liệt kê tệp trong thư mục. Ví dụ, bạn có thể muốn tìm tất cả tệp Python trong một thư mục.

Thư viện os của Python cung cấp nhiều phương thức có thể dùng để liệt kê tệp trong thư mục. Hướng dẫn này sẽ thảo luận cách dùng os.listdir() để lấy tệp và thư mục trong một thư mục. Chúng ta cũng sẽ nói về dùng os.walk() để lấy tệp và thư mục trong thư mục và các thư mục con của nó.

Thư viện os của Python

Thư viện os của Python cung cấp nhiều hàm bạn có thể dùng để làm việc với hệ điều hành. Các hàm trong mô-đun os hoạt động trên bất kỳ hệ điều hành hiện đại nào, चाहे Windows, Linux, hay Mac.

Vì os là thư viện bên ngoài, chúng ta cần nhập nó vào mã trước khi bắt đầu dùng. Chúng ta có thể làm vậy bằng câu lệnh import Python:

import os

Bây giờ chúng ta đã nhập thư viện os vào mã, chúng ta có thể bắt đầu dùng các hàm của nó để liệt kê mục trong thư mục.

Python os.listdir()

Trong Python, phương thức os.listdir() liệt kê tệp và thư mục trong một thư mục cho trước. Phương thức không trả về các mục đặc biệt như '.' và '..', mà hệ điều hành dùng để điều hướng qua các thư mục khác nhau.

os.listdir() cũng không trả về tệp và thư mục vượt quá cấp thư mục đầu tiên. Nói cách khác, os.listdir() không trả về bất kỳ thứ gì bên trong thư mục con được khám phá bởi phương thức.

Hàm os.listdir() chấp nhận một tham số: đường dẫn tệp của thư mục mà bạn muốn lấy tên tệp và thư mục.

Cú pháp cho phương thức listdir:

os.listdir(path)

Hãy đi qua ví dụ để minh họa cách dùng phương thức này trong chương trình Python.

Ví dụ Python os.listdir()

Giả sử chúng ta đang tạo chương trình phân tích hiệu suất chứng khoán Netflix trong thập kỷ qua. Chúng ta có thư mục (tên: /home/data_analysis/netflix) chứa tất cả dữ liệu thô, và trước khi chương trình chạy, chúng ta muốn kiểm tra xem tệp raw_data_2019.csv có tồn tại trong thư mục đó không.

Để hoạt động đúng, chương trình cần tệp cụ thể đó được lưu trong thư mục cụ thể đó.

Chúng ta có thể dùng mã sau để lấy danh sách tệp trong thư mục làm việc /home/data_analysis/netflix:

import os
path = '/home/data_analysis/netflix'
files = os.listdir(path)
for f in files:
    print(f)

Chương trình lấy danh sách tất cả tệp và thư mục trong thư mục chỉ định và trả về:

README.md
app.py
raw_data_2016.csv
raw_data_2017.csv
raw_data_2018.csv
raw_data_2019.csv
processed_data

Bây giờ, chúng ta có thể kiểm tra xem tệp raw_data_2019.csv có trong thư mục không. Như bạn thấy, nó có.

Hãy phân tích mã. Dòng đầu, nhập mô-đun os, cần thiết để truy cập hàm os.listdir(). Sau đó, khai báo biến Python tên path, lưu tên đường dẫn mà chúng ta muốn lấy nội dung.

Dòng tiếp theo, dùng phương thức os.listdir() để lấy danh sách tệp và thư mục trong thư mục /home/data_analysis/netflix. Cuối cùng, tạo vòng lặp for Python. Vòng lặp lặp qua mỗi mục trong danh sách do os.listdir() tạo ra. Chúng ta in tên mỗi tệp ra bảng điều khiển dùng câu lệnh print() Python.

Thư mục /home/data_analysis/netflix chứa sáu tệp và một thư mục. Thư mục tên processed_data và khác biệt với các tệp khác vì nó không có phần mở rộng.

Python os.walk()

Hàm os.walk() lấy danh sách tệp chứa trong một cây. Phương thức lặp qua mỗi thư mục trong cây. Sau đó, os.walk() trả về tên mọi tệp và thư mục trong thư mục và các thư mục con của nó.

Cú pháp cho phương thức os.walk() như sau:

os.walk(top, topdown, onerror, followlinks)

Phương thức os.walk() chấp nhận bốn tham số:

  • top là thư mục cấp cao nhất mà bạn muốn lấy tên thành phần tệp và thư mục (bắt buộc)
  • topdown, khi đặt thành True, chỉ định thư mục nên được quét từ trên xuống. Nếu giá trị này đặt thành False, thư mục sẽ được quét từ dưới lên (tùy chọn)
  • onerror cung cấp trình xử lý lỗi nếu gặp lỗi (tùy chọn)
  • followlinks, nếu đặt thành True, truy cập thư mục được tham chiếu bằng liên kết hệ thống (tùy chọn)

Chúng ta sẽ tập trung vào hai tham số đầu vì onerror và followlinks nâng cao hơn và ít dùng hơn.

Ví dụ Python os.walk()

Giả sử chúng ta muốn lấy tên tất cả tệp trong thư mục /home/data_analysis/netflix. Chúng ta cũng muốn biết gì được chứa trong tất cả thư mục con trong thư mục đó.

Như thảo luận ở trên, thư mục netflix chứa một thư mục: processed_data. Chúng ta có thể dùng mã sau để lấy tên tất cả tệp trong thư mục /home/data_analysis/netflix và thư mục con của nó:

import os
path = '/home/data_analysis/netflix'
for root, directories, files in os.walk(path, topdown=False):
    for name in files:
        print(os.path.join(root, name))
    for name in directories:
        print(os.path.join(root, name))

Đây là đầu ra từ mã của chúng ta:

/home/data_analysis/netflix/README.md
/home/data_analysis/netflix/app.py
/home/data_analysis/netflix/raw_data_2016.csv
/home/data_analysis/netflix/raw_data_2017.csv
/home/data_analysis/netflix/raw_data_2018.csv
/home/data_analysis/netflix/raw_data_2019.csv
/home/data_analysis/netflix/processed_data
/home/data_analysis/netflix/processed_data/final.csv

Chúng ta nhập mô-đun os từ đó tham chiếu phương thức os.walk() và os.path.join() sau này trong mã. Sau đó, khai báo biến tên path, lưu đường dẫn mà chúng ta muốn khám phá tên tệp.

Chúng ta tạo vòng lặp for dùng os.walk() lấy danh sách tất cả tệp và thư mục trong thư mục path. Vòng lặp lặp qua tệp và thư mục mà os.walk() trả về.值得注意的是 chúng ta chỉ định tham số topdown=False trong phương thức os.walk(), nói cho mã thực hiện tìm kiếm từ trên xuống.

Vòng lặp for lặp qua mỗi tệp và thư mục được khám phá bởi phương thức os.walk() dùng các vòng lặp for bổ sung. Chúng ta in tệp trong os.walk() ra bảng điều khiển.

Trong mã trên, đây là vòng lặp for của chúng ta:

for root, directories, files in os.walk(path):
    for name in files:
        print(os.path.join(root, name))
    for name in directories:
        print(os.path.join(root, name))

Sau đó, chương trình dùng os.path.join() để gộp thư mục gốc của mỗi tệp (ví dụ: /home/data_analysis/netflix) và tên tệp (ví dụ: raw_data_2019.csv). Thư mục gốc tham chiếu đến đường dẫn thư mục nơi tệp tồn tại.

Kết luận

Bạn có thể dùng phương thức Python listdir() để làm điều này. Bạn cũng có thể dùng phương thức walk(), liệt kê mọi thứ trong thư mục, bao gồm bất kỳ thứ gì trong thư mục con.

Hướng dẫn này đã khám phá, cung cấp ví dụ, cách dùng phương thức os.listdir() và os.walk() để liệt kê tệp và thư mục trong thư mục trong Python. Bây giờ bạn có kỹ năng để liệt kê tệp trong thư mục trong Python như chuyên gia!

Để tìm hiểu thêm về lập trình Python, đọc hướng dẫn đầy đủ How to Learn Python của chúng tôi.