Lấy danh sách tên file và thư mục trong python | Laptrinhcanban.com

Lấy danh sách tên file và thư mục trong python

Hướng dẫn cách lấy danh sách tên file và thư mục trong python. Bạn sẽ học được cách lấy danh sách tên file và thư mục trong python, lấy danh sách đệ quy tên file và thư mục trong python
với các phương pháp như bằng hàm os.listdir(), hàm glob.glob(), phương thức Path.iterdir() sau bài học này.

Lấy danh sách tên file và thư mục trong python | os.listdir()

Để lấy danh sách tên file và thư mục có trong thư mục được chỉ định, chúng ta dùng hàm os.listdir() tích hợp trong module os, với cú pháp sau đây:

os.listdir(path)

Trong đó path là đường dẫn thư mục cần lấy danh sách file và thư mục con trong đó.

Sau khi chạy, kết quả trả về một list chứa tên của tất cả file và thư mục con có trong thư mục được chỉ định.

Lưu ý là hàm os.listdir() chỉ có thể lấy được các file và thư mục con nằm trực tiếp dưới thư mục được chỉ định, chứ không thể lấy được các file và thư mục chứa trong các thư mục con của nó.

Ví dụ, bạn có một thư mục có cấu trúc như sau:

data/
├── user
│   ├── dir1
│   ├── dir2
│   │     └── name.txt
│   ├── pass.txt
│   └── user.txt
├── client
└── move.py

Chúng ta sẽ lấy danh sách tên file và thư mục có trong thư mục user như sau:

import os

src='./user'
obj_list=os.listdir(src)
print(obj_list)

#>> ['dir1', 'dir2', 'pass.txt', 'user.txt']

Bạn có thể thấy trong kết quả tên các file và thư mục con nằm trực tiếp dưới thư mục user['dir1', 'dir2', 'pass.txt', 'user.txt'], tuy nhiên file name.txt trong thư mục con dir2 lại không thể lấy được.

Để lấy danh sách đệ quy tên file và thư mục trong python, hãy sử dụng hàm glob() được hướng dẫn ở phần Lấy danh sách đệ quy tên file và thư mục trong python | glob()

Lấy danh sách tên file trong thư mục python | os.path.isfile()

Khi chỉ muốn lấy danh sách tên file trong thư mục python, chúng ta cần kết hợp hàm kiểm tra file có tồn tại hay không, và cách viết nội hàm List comprehension trong python.
Chúng ta viết :

import os

path = "./dir"
objects = os.listdir(path)
files_file = [f for f in objects if os.path.isfile(os.path.join(path, f))]

print(files_file)
# ['pass.txt', 'user.txt']

Lấy danh sách tên thư mục trong python | os.path.isdir()

Tương tự, nếu chỉ muốn lấy danh sách tên thư mục trong python, chúng ta sử dụng kèm hàm kiểm tra folder có tồn tại hay không trong python.
Chúng ta viết như sau:

import os

objects = os.listdir(path)
files_dir = [f for f in objects if os.path.isdir(os.path.join(path, f))]
print(files_dir)
# ['dir1', 'dir2']

Lấy danh sách tên file và thư mục trong python | Path.iterdir()

Chúng ta cũng có thể sử dụng phương thức iterdir() trong module pathlib để lấy danh sách tên file và thư mục trong python với cú pháp sau đây:

os.listdir(path)

Trong đó path là một instance tạo ra bởi class pathlib.Path() chứa thông tin đường dẫn của thư mục gốc.
Kết quả trả về của chương trình là một path iterator - một trình lặp đại diện cho các tệp và thư mục có trong thư mục gốc.

Cách sử dụng như ví dụ sau:

import pathlib

p = pathlib.Path('./user')
user_iter = p.iterdir()
print(user_iter)
#<generator object Path.iterdir at 0x000001A2F9BC0CF0>

for file in user_iter:
print(file)
#user\dir1
#user\dir2
#user\pass.txt
#user\user.txt

Lấy danh sách tên file và thư mục trong python | glob()

Chúng ta cũng có thể sử dụng hàm glob() trong module glob() để lấy danh sách tên file và thư mục trong python với cách viết sau đây:

import glob

obj_list=glob.glob("./user/**")
print(obj_list)

# ['./user\\dir1', './user\\dir2', './user\\pass.txt', './user\\user.txt']

Bạn có thể gán đường dẫn thư mục vào biến và sử dụng như sau:

import glob

src="./user"
obj_list=glob.glob(src+"/**")
print(obj_list)

# ['./user\\dir1', './user\\dir2', './user\\pass.txt', './user\\user.txt']

Lấy danh sách đệ quy tên file và thư mục trong python | glob()

Để lấy danh sách đệ quy tên file và thư mục trong python, bao gồm cả các file và thư mục trong một thư mục và các thư mục con của nó, chúng ta sử dụng hàm glob() đệ quy như sau:

import glob

obj_list=glob.glob("./user/**",recursive=True)
print(obj_list)

Bạn có thể gán đường dẫn thư mục vào biến và sử dụng như sau:

import glob

src="./user"
obj_list=glob.glob(src+"/**",recursive=True)
print(obj_list)

Cả hai đều đưa ra kết quả là danh sách đệ quy tên file và thư mục có trong thư mục user như sau:

['./user\\', './user\\dir1', './user\\dir1\\kiyoshi', './user\\dir1\\user.txt', './user\\dir2', './user\\dir2\\kiyoshi', './user\\dir2\\user.txt', './user\\pass.txt', './user\\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 danh sách tên file và thư mục 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.