Cách lấy tên tệp hiệu quả trong Python: mô-đun os và pathlib

1. Giới thiệu

Python rất linh hoạt trong việc thao tác tệp và có thể tự động hóa nhiều công việc chỉ với mã đơn giản. Bài viết này sẽ giới thiệu một số cách để “lấy tên tệp” bằng Python. Đặc biệt, chúng ta sẽ tập trung vào các mô-đun ospathlib thuộc thư viện chuẩn. Sau khi đọc bài viết này, bạn sẽ có được kỹ năng thao tác hiệu quả với các tệp trong thư mục và xây dựng các tập lệnh để lấy và lọc tên tệp.

2. Cơ bản về cách lấy tên tệp trong Python

Trước hết, chúng ta bắt đầu với các phương pháp cơ bản để lấy tên tệp trong Python. Bằng cách sử dụng hàm os.path.basename(), bạn có thể lấy tên tệp từ đường dẫn đã chỉ định。

2.1 Cách sử dụng os.path.basename()

os.path.basename() là một hàm dùng để lấy riêng tên tệp từ đường dẫn đầy đủ. Trong ví dụ dưới đây, chúng ta sẽ trích xuất tên tệp từ đường dẫn tệp.
import os

file_path = "/user/home/document/file.txt"
file_name = os.path.basename(file_path)
print(file_name)  # Kết quả: "file.txt"

2.2 Lấy tên thư mục bằng os.path.dirname()

Tương tự, khi dùng os.path.dirname(), bạn có thể lấy tên thư mục từ đường dẫn tệp. Nhờ đó, bạn có thể tách riêng tên tệp và tên thư mục.
dir_name = os.path.dirname(file_path)
print(dir_name)  # Kết quả: "/user/home/document"
年収訴求

3. Lấy tất cả tên tệp trong thư mục

Để lấy tất cả các tệp và thư mục trong một thư mục dưới dạng danh sách, os.listdir() rất tiện lợi. Ngoài ra, để lấy các tệp trong thư mục con một cách đệ quy, os.walk() rất hữu ích。

3.1 Lấy tên tệp bằng os.listdir()

os.listdir() cho phép bạn lấy tất cả các tệp và thư mục trong thư mục được chỉ định dưới dạng một danh sách. Rất phù hợp cho các thao tác thư mục đơn giản.
import os

dir_path = "/user/home/document"
files = os.listdir(dir_path)
print(files)  # Kết quả: ["file1.txt", "file2.txt", "subfolder"]

3.2 Lấy tên tệp một cách đệ quy với os.walk()

Nếu bạn muốn lấy tệp một cách đệ quy bao gồm cả thư mục con, sử dụng os.walk() là hiệu quả nhất. Đoạn mã dưới đây liệt kê tất cả các tệp tồn tại trong thư mục được chỉ định và các thư mục con của nó.
import os

dir_path = "/user/home/document"
for root, dirs, files in os.walk(dir_path):
    for file in files:
        print(os.path.join(root, file))

3.3 Thêm xử lý lỗi

Có thể xảy ra lỗi nếu thư mục không tồn tại hoặc không có quyền truy cập. Vì vậy, khuyến nghị thêm xử lý ngoại lệ bằng try-except.
dir_path = "/invalid/path"
try:
    files = os.listdir(dir_path)
    print(files)
except FileNotFoundError:
    print(f"Không tìm thấy {dir_path}.")

4. Lấy và thay đổi phần mở rộng tệp

Khi lấy tên tệp, đôi khi cũng cần thao tác với phần mở rộng. Bằng cách sử dụng os.path.splitext(), bạn có thể tách hoặc thay đổi phần mở rộng.

4.1 Lấy phần mở rộng bằng os.path.splitext()

os.path.splitext() là một hàm tách tên tệp và phần mở rộng rồi trả về.
import os

file_path = "/user/home/document/file.txt"
file_name, file_ext = os.path.splitext(file_path)
print(file_name)  # Kết quả: "/user/home/document/file"
print(file_ext)   # Kết quả: ".txt"

4.2 Thay đổi phần mở rộng

Khi cần thay đổi phần mở rộng, hãy thêm phần mở rộng mới vào tên tệp đã lấy bằng os.path.splitext().
new_file_path = file_name + ".jpg"
print(new_file_path)  # Kết quả: "/user/home/document/file.jpg"
年収訴求

5. Ứng dụng lấy tên tệp bằng mô-đun pathlib

Kể từ Python 3.4 trở đi, mô-đun pathlib rất tiện lợi cho việc thao tác đường dẫn tệp. pathlib cho phép thao tác đường dẫn tệp theo cách hướng đối tượng, giúp sử dụng trực quan hơn.

5.1 Lấy tên tệp bằng Path.iterdir()

Sử dụng phương thức iterdir() của pathlib.Path(), bạn có thể lấy tên tệp và tên thư mục trong thư mục đã chỉ định.
from pathlib import Path

dir_path = Path("/user/home/document")
for item in dir_path.iterdir():
    print(item.name)

5.2 Lấy tệp đệ quy: rglob()

Để lấy tên tệp một cách đệ quy bao gồm cả các thư mục con, hãy sử dụng phương thức rglob(). Phương thức này cũng có thể được dùng như một lựa chọn thay thế cho os.walk().
for file in dir_path.rglob("*"):
    print(file)

6. Lọc tên tệp

Nếu bạn muốn chỉ lấy các tên tệp đáp ứng điều kiện cụ thể, bạn có thể lọc bằng mô-đun glob hoặc phương thức glob() của pathlib.

6.1 Lọc theo phần mở rộng

Để chỉ lấy các tệp có phần mở rộng cụ thể, hãy dùng ký tự đại diện *.
from pathlib import Path

dir_path = Path("/user/home/document")
for file in dir_path.glob("*.txt"):
    print(file)
Đoạn mã này chỉ lấy các tệp .txt trong thư mục đã chỉ định.

7. Tổng kết

Có nhiều cách để lấy tên tệp bằng Python, nhưng điều quan trọng là chọn phương pháp phù hợp tùy theo mục đích sử dụng. Từ các thao tác cơ bản của mô-đun os đến việc tận dụng các tính năng nâng cao của pathlib, bạn có thể xử lý tệp trong thư mục một cách hiệu quả. Trong phần tiếp theo, như một ứng dụng của thao tác với tệp, chúng tôi sẽ cung cấp thông tin về việc đổi tên, di chuyển và xóa tệp.
侍エンジニア塾