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

Liệt kê thư mục và file trong Python

Nhiều cách để liệt kê file/thư mục trong Python, từ cơ bản đến nâng cao.

1. os.listdir() - Cơ bản nhất

import os

# Thư mục hiện tại
for x in os.listdir('.'):
    print(x)

# Thư mục cụ thể
for x in os.listdir(r'C:\Python\Python361\selenium'):
    print(x)

2. Phân biệt file vs thư mục

for x in os.listdir('.'):
    if os.path.isfile(x):
        print('file-', x)
    elif os.path.isdir(x):
        print('directory-', x)
    elif os.path.islink(x):
        print('link-', x)

3. Lọc với filter() / list comprehension

# Chỉ file
files = list(filter(lambda x: os.path.isfile(x), os.listdir('.')))

# Chỉ thư mục
dirs = list(filter(lambda x: os.path.isdir(x), os.listdir('.')))

# File .txt
txt_files = [x for x in os.listdir('.') if x.endswith('.txt')]

# Regex: file .txt hoặc .py
import re
pattern = re.compile(r'\.(txt|py)$')
matched = list(filter(pattern.search, os.listdir('.')))

4. os.walk() - Đệ quy (recursive)

Duyệt toàn bộ cây thư mục con.

for root, dirs, files in os.walk(r'C:\Python\Python361\selenium'):
    for filename in files:
        print(os.path.join(root, filename))

5. pathlib (Python 3.4+) - Hiện đại, OOP

from pathlib import Path

p = Path('.')

# Tất cả file/thư mục
for item in p.iterdir():
    print(item)

# Chỉ file .txt
for txt in p.glob('*.txt'):
    print(txt)

# Đệ quy tìm .py
for py in p.rglob('*.py'):
    print(py)

# Thông tin file
for item in p.iterdir():
    print(item.name, item.is_file(), item.is_dir(), item.stat().st_size)

6. glob module - Pattern matching

import glob

# File .txt trong thư mục hiện tại
glob.glob('*.txt')

# Đệ quy ** (Python 3.5+)
glob.glob('**/*.py', recursive=True)

# Với path tuyệt đối
glob.glob(r'C:\Python\**\*.py', recursive=True)

So sánh nhanh

os.listdirNhanh, đơn giản, không đệ quy
os.walkĐệ quy đầy đủ, trả về (root, dirs, files)
pathlibOOP, path object, method chaining, khuyến nghị Python 3.4+
globPattern matching mạnh, hỗ trợ ** đệ quy