Lấy tên file, thư mục và đuôi file trong python | Laptrinhcanban.com

Lấy tên file, thư mục và đuôi file trong python

Hướng dẫn cách lấy tên file, thư mục và đuôi file trong python. Bạn sẽ học được cách sử dụng các hàm trong module os như os.path.basename(), os.path.dirname(), os.path.split(), os.path.splitext() trong python để lấy tên file, tên thư mục, đường dẫn thư mục và đuôi file trong python sau bài học này.

Lấy tên file trong python | os.path.basename()

Để lấy tên file trong python, chúng ta sử dụng hàm os.path.basename() trong module os, với cú pháp sau đây:

os.path.basename(path)

Trong đó path là đường dẫn của file cần lấy tên trong python. Kết quả chương trình, một tên file đầy đủ bao gồm cả tên và đuôi file sẽ được trả về.

Ví dụ, chúng ta có một thư mục như sau:

  |data/
  |--dir1
  |  |
  |  |--user.txt
  |
  |--dir2
  |
  |--take_file_name.py

Chúng ta lấy tên của file user.txt như sau:

import os
filepath = './dir1/user.txt'

basename = os.path.basename(filepath)
print(basename)
# user.txt

print(type(basename))
# <class 'str'>

Lưu ý, chúng ta có thể lấy tên file trong python ngay cả khi file đó vốn không tồn tại bằn hàm os.path.basename(). Do hàm này không kiểm tra file có tồn tại hay không, nên lỗi không xảy ra:

import os
filepath_not_exist = './dir1/address.txt'

basename = os.path.basename(filepath_not_exist)
print(basename)
# address.txt

Nếu bạn chỉ muốn lấy tên file trong python với những file đã tồn tại, hãy sử dụng kết hợp với phương pháp kiểm tra file có tồn tại hay không mà Kiyoshi đã giới thiệu tại bài viết Kiểm tra tồn tại của file và thư mục trong python.

Lấy đuôi file trong python | os.path.splitext()

Để Lấy tên file trong python, chúng ta sử dụng hàm os.path.basename() ở trên kết hợp với hàm os.path.splitext() trong module os, với cú pháp sau đây:

os.path.splitext(filename)

Trong đó filename là tên file đầy đủ bao gồm cả tên và đuôi file của file cần lấy đuôi file trong python.
Hàm os.path.splitext() sẽ chia fileame thành hai phần tại vị trí dấu chấm . cuối cùng ở bên phải, và lưu giữ kết quả dưới dạng một tuple.

Thông thường, file sẽ có dạng tên file + . + đuôi file, do đó sau khi dùng hàm os.path.splitext() thì tên file và đuôi file( bao gồm cả dấu chấm .) sẽ được tách ra và lưu giữ dưới dạng một tuple.
Tùy vào mục đích sử dụng, ví dụ như chúng ta muốn lấy đuôi file trong python hay là lấy tên file không gồm đuôi file trong python mà chúng ta lấy thông tin ra từ tuple tạo ra.

Ví dụ, chúng ta lấy đuôi file và tên file không gồm đuôi file trong python như sau:

import os
filepath = './dir1/user.txt'

basename = os.path.basename(filepath)
print(basename)
#user.txt

name_tuple= os.path.splitext(basename)
print(name_tuple)
#('user', '.txt')

filename=name_tuple[0]
print(filename)
#user

file_extension=name_tuple[1]
print(file_extension)
#.txt

Nngoài cách truy cập vào phần tử trong tuple và lấy ra đuôi file , tên như ở trên, chúng ta còn có thể giải nén tuple và gán biến rồi sử dụng trực tiếp như dưới đây.

import os
filepath = './dir1/user.txt'

file_name, file_extension = os.path.splitext(os.path.basename(filepath))
print(file_name)
#user

print(file_extension)
#.txt

Lưu ý, do trong kết quả của hàm os.path.splitext() sẽ bao gồm cả dấu chấm . ở trong đuôi file, do đó nếu bạn muốn bỏ đi dấu chấm này, hãy sử dụng kết hợp với hàm tách chuỗi trong python, hoặc là dùng cách xóa đi dấu chấm này bằng cách dùng hàm xóa ký tự trong chuỗi python.

file_extension_without_dot=name_tuple[1].strip(".")

Lại nữa, do hàm os.path.splitext() chỉ tách đối số được chỉ định thành hai phần tại vị trí dấu chấm cuối cùng bên phải, nên với các file mà tên file được tạo ra từ nhiều hơn hai dấu chấm như filename.tar.gz, chúng ta cần phải sử dụng hàm này hai lần để có thể lấy tên file không kèm đuôi file trong python.

import os
filepath_tar_gz = './data/dir1/filename.tar.gz'
basename=os.path.basename(filepath_tar_gz)
print(basename)
#filename.tar.gz

basename_split1=os.path.splitext(basename)
print(basename_split1[0])
#filename.tar

basename_split2=os.path.splitext(basename_split1)
print(basename_split2[0])
#filename

Lấy tên thư mục trong python | os.path.basename()

Chúng ta cũng dùng hàm os.path.basename() để lấy tên thư mục trong python, bằng cách chỉ định đối số path là một đường dẫn thư mục

os.path.basename(path)

Cách sử dụng cũng tương tự như khi lấy tên file trong python, ví dụ:

import os

folderpath = './user/dir1'
print(os.path.basename(folderpath))
# dir1

Lấy đường dẫn thư mục trong python | os.path.dirname()

Để lấy đường dẫn thư mục trong python, chúng ta sử dụng hàm os.path.dirname() trong module os, với cú pháp sau đây:

os.path.dirname(path)

Trong đó path là đường dẫn của file hoặc thư mục cần lấy đường dẫn thư mục mẹ. Sau khi chạy, đường dẫn của thư mục mẹ chứa file hoặc thư mục chỉ đinh sẽ được trả về.
Ví dụ:

import os
filepath = './user/dir1/user.txt'
print(os.path.dirname(filepath))
#./user/dir1

dir_path='./user/dir1'
print(os.path.dirname(dir_path))
#./user

Tương tự như với hàm os.path.basename() thì hàm os.path.dirname() không kiểm tra sự tồn tại của đường dẫn chỉ định, do đó chúng ta cũng có thể lấy đường dẫn của thư mục kể cả thư mục đó vốn không tồn tai trước đó:

import os
path_not_exist = './client/address.txt'

dirname = os.path.dirname(path_not_exist)
print(dirname)
#./client

Trong trường hợp chúng ta cần lấy tên của thư mục mẹ chứa file hoặc thư mục đã được chỉ định, hãy sử dụng kèm với hàm os.path.basename() như sau

import os
filepath = './user/dir1/user.txt'
subdirname = os.path.basename(os.path.dirname(filepath))
print(subdirname)
# dir1

Lấy tên file kèm tên thư mục trong python | os.path.split()

Để lấy tên file kèm tên thư mục chứa nó trong python, chúng ta sử dụng hàm os.path.split() trong module os với cú pháp sau đây:

os.path.split(path)

Trong đó path là đường dẫn của file cần lấy tên file kèm tên thư mục chứa nó.
Hàm os.path.split() sẽ tách đường dẫn chỉ định thành hai phần, tại vị trí dấu phân cách đường dẫn cuối cùng bên phải, sau đó lưu giữ kết quả vào một tuple.

Ví dụ:

import os
filepath = './user/dir1/user.txt'
files= os.path.split(filepath)

print(files)
#('./user/dir1', 'user.txt')

Để lấy tên file và tên thư mục chứa file đó, chúng ta có thể truy cập vào phần tử trong tuple ở trên như sau:

dir_path=files[0]
print(dir_path)
#./user/dir1

filename=files[1]
print(filename)
#user.txt

Ngoài ra, chúng ta có thể giải nén tuple trên và gán biến rồi sử dụng như dưới đây.

import os
filepath = './user/dir1/user.txt'
dirname, basename = os.path.split(filepath)
print(dirname)
#./user/dir1

print(basename)
#user.txt

Tổng kết và thực hành

Trên đây Kiyoshi đã hướng dẫn bạn về cách lấy tên file, thư mục và đuôi file trong python rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về python trong các bài học tiếp theo.

HOME>> >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.