目次
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ô-đunos
và pathlib
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àmos.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ằngtry-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ụngos.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ằngos.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ô-đunglob
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ô-đunos
đế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.