Lấy tên file trong thư mục bằng Python (Hướng dẫn cho người mới bắt đầu)

目次

1. Giới thiệu

Việc lấy tên tệp từ một thư mục trong Python là một kỹ năng rất hữu ích cho các lập trình viên từ mới bắt đầu đến trung cấp. Có thể lấy tên tệp giúp tối ưu hoá việc xử lý dữ liệu hàng loạt và các thao tác với tệp, hỗ trợ tự động hoá và tổ chức dữ liệu.

Trong bài viết này, chúng tôi sẽ giải thích từng bước cách lấy tên tệp từ một thư mục bằng Python. Chúng tôi cung cấp các ví dụ mã và giải thích rõ ràng để ngay cả những người học lần đầu cũng có thể theo dõi.

2. Lấy tên tệp cơ bản bằng mô-đun os

Nếu bạn sử dụng mô-đun chuẩn os của Python, bạn có thể dễ dàng lấy tên tệp trong một thư mục. Cách tiếp cận này phù hợp ngay cả với những người mới học Python, với cấu trúc mã đơn giản và trực quan.

Cách sử dụng cơ bản của hàm os.listdir()

os.listdir() trả về một danh sách các tên của tất cả các mục (tệp và thư mục) trong thư mục được chỉ định.

import os

# Get files and directories in the folder
folder_path = "sample_folder"
items = os.listdir(folder_path)

print("Items in the folder:")
print(items)

Khi bạn chạy đoạn mã trên, các tên tệp và thư mục trong thư mục đã chỉ định sẽ được hiển thị dưới dạng danh sách.

Cách trích xuất chỉ tên tệp

Danh sách đã lấy có thể bao gồm cả tên thư mục. Bằng cách sử dụng os.path.isfile(), bạn có thể trích xuất chỉ các tệp.

import os

# Get only file names in the folder
folder_path = "sample_folder"
files = [f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f))]

print("Files in the folder:")
print(files)

Trong đoạn mã này, mỗi mục được kiểm tra xem có phải là tệp hay không, và chỉ các tên tệp được lưu vào danh sách.

Ví dụ

Ví dụ, nếu bạn muốn tạo một danh sách các tệp hình ảnh được lưu trong một thư mục, bạn có thể làm như sau.

import os

# Get image files
folder_path = "images"
image_files = [f for f in os.listdir(folder_path) if f.endswith((".png", ".jpg", ".jpeg"))]

print("Image file list:")
print(image_files)

Ưu điểm của phương pháp này

  • Đơn giản và dễ hiểu.
  • Có thể triển khai chỉ bằng thư viện chuẩn của Python.
  • Lý tưởng cho các thao tác tệp trong thư mục nhỏ.

Lưu ý

  • Các tệp ẩn hoặc tệp có tên bất thường có thể được bao gồm, vì vậy cần lọc khi cần.
  • Sử dụng trên các thư mục lớn có thể ảnh hưởng đến hiệu suất.

3. Sử dụng mô-đun glob để tìm kiếm bằng ký tự đại diện

Nếu bạn sử dụng mô-đun glob của Python, bạn có thể hiệu quả lấy tên tệp phù hợp với một mẫu cụ thể. Khác với mô-đun os, nó cho phép linh hoạt thiết lập tiêu chí tìm kiếm tên tệp bằng các ký tự đại diện.

Cách sử dụng cơ bản của mô-đun glob

Bằng cách sử dụng glob.glob(), bạn có thể lấy các tệp và thư mục khớp với mẫu đã chỉ định.

import glob

# Get all files in the folder
folder_path = "sample_folder"
files = glob.glob(f"{folder_path}/*")

print("Files in the folder:")
print(files)

Đoạn mã này lấy đường dẫn của tất cả các mục (tệp và thư mục) trong thư mục đã chỉ định.

Lấy các tệp khớp với mẫu cụ thể

Ví dụ, để chỉ lấy các tệp có một phần mở rộng cụ thể, viết như sau.

import glob

# Get files with the specified extension
folder_path = "sample_folder"
text_files = glob.glob(f"{folder_path}/*.txt")

print("Text files:")
print(text_files)

Trong ví dụ này, chỉ các tệp có phần mở rộng .txt được lấy. Tương tự, để chỉ định nhiều phần mở rộng, viết như sau.

import glob

# Get files by specifying multiple extensions
folder_path = "sample_folder"
files = glob.glob(f"{folder_path}/*.txt") + glob.glob(f"{folder_path}/*.csv")

print("Text and CSV files:")
print(files)

Lấy tệp đệ quy

Bằng cách sử dụng tùy chọn recursive=True của mô-đun glob, bạn có thể lấy các tệp bao gồm cả những tệp trong các thư mục con.

import glob

# Recursively get all files in subdirectories
folder_path = "sample_folder"
files = glob.glob(f"{folder_path}/**/*", recursive=True)

print("All files in subdirectories:")
print(files)

Ví dụ về cách sử dụng ký tự đại diện

  • * : Đại diện cho bất kỳ chuỗi nào.
  • ? : Đại diện cho bất kỳ ký tự đơn lẻ nào.
  • [abc] : Đại diện cho bất kỳ ký tự nào trong ngoặc vuông.
import glob

# Get any files whose filename starts with "data"
folder_path = "sample_folder"
files = glob.glob(f"{folder_path}/data*")

print("Files starting with 'data':")
print(files)

Ưu điểm và trường hợp sử dụng

  • Cho phép chỉ định mẫu linh hoạt và được thiết kế dành riêng cho việc tìm kiếm tên tệp.
  • So với mô-đun os, mã thường ngắn gọn hơn.
  • Việc tìm kiếm đệ quy dễ thực hiện.

Ghi chú

  • Trả về danh sách rỗng khi không có gì khớp với mẫu, vì vậy hãy kiểm tra kết quả.
  • Tìm kiếm đệ quy có thể trả về số lượng tệp rất lớn, vì vậy áp dụng bộ lọc phù hợp.

4. Mô-đun pathlib: Thao tác đường dẫn theo hướng đối tượng

Mô-đun pathlib của Python cung cấp cách làm việc với đường dẫn tệp hiện đại, trực quan theo cách hướng đối tượng. Điều này cải thiện khả năng đọc mã và làm cho các hoạt động đơn giản hơn.

Sử dụng cơ bản của mô-đun pathlib

Sử dụng đối tượng Path từ mô-đun pathlib, bạn có thể dễ dàng lấy các mục trong một thư mục.

from pathlib import Path

# Get items in the folder
folder_path = Path("sample_folder")
items = list(folder_path.iterdir())

print("Items in the folder:")
print(items)

Trong mã này, tất cả các mục (tệp và thư mục) trong thư mục được trả về dưới dạng danh sách các đối tượng Path.

Trích xuất chỉ tên tệp

Để lấy chỉ các tệp từ các mục thư mục, sử dụng phương thức is_file().

from pathlib import Path

# Get files in the folder
folder_path = Path("sample_folder")
files = [f for f in folder_path.iterdir() if f.is_file()]

print("Files in the folder:")
print(files)

Trong mã này, các thư mục bị loại trừ và chỉ các tệp được lưu trữ trong danh sách.

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

Để lấy chỉ các tệp có phần mở rộng cụ thể, chỉ định phần mở rộng làm điều kiện.

from pathlib import Path

# Get files with a specific extension in the folder
folder_path = Path("sample_folder")
text_files = [f for f in folder_path.iterdir() if f.is_file() and f.suffix == ".txt"]

print("Text files:")
print(text_files)

Thuộc tính suffix làm cho việc lấy phần mở rộng của tệp trở nên dễ dàng.

Lấy tệp đệ quy

Để bao gồm các tệp trong thư mục con, sử dụng phương thức rglob().

from pathlib import Path

# Get all files in subdirectories
folder_path = Path("sample_folder")
files = list(folder_path.rglob("*"))

print("All files in subdirectories:")
print(files)

Ngoài ra, bạn có thể tìm kiếm đệ quy các tệp khớp với mẫu cụ thể.

from pathlib import Path

# Get files with a specific extension in subdirectories
folder_path = Path("sample_folder")
text_files = list(folder_path.rglob("*.txt"))

print("Text files retrieved recursively:")
print(text_files)

Lợi ích và trường hợp sử dụng

  • Viết mã trực quan, hướng đối tượng.
  • Các hoạt động đệ quy và lọc dễ thực hiện.
  • Có sẵn từ Python 3.4 và được khuyến nghị trong các phiên bản Python gần đây.

Ghi chú

  • Không có sẵn trên các phiên bản Python không được hỗ trợ (sớm hơn 3.4).
  • Hãy chú ý đến hiệu suất khi hoạt động trên các thư mục rất lớn.

侍エンジニア塾

5. Cách lấy tệp đệ quy trong thư mục con

Khi lấy tệp từ một thư mục, bạn có thể muốn bao gồm các tệp trong thư mục con và lấy chúng một cách đệ quy. Phần này giải thích các kỹ thuật để lấy tệp đệ quy bằng mô-đun os và các phương pháp khác.

Sử dụng os.walk()

os.walk() duyệt đệ quy thư mục được chỉ định và các thư mục con của nó, trả về tên thư mục, tên thư mục con và tên tệp.

import os

# Retrieve all files in subdirectories
folder_path = "sample_folder"

for root, dirs, files in os.walk(folder_path):
    for file in files:
        print(f"File: {os.path.join(root, file)}")

Giải thích mã:

  • os.walk() trả về một bộ (đường dẫn thư mục, danh sách thư mục con, danh sách tệp).
  • Sử dụng os.path.join() để xây dựng đường dẫn tệp đầy đủ.

Thu thập tất cả các tệp vào một danh sách

Nếu bạn muốn lưu trữ tất cả các tệp đã truy xuất vào một danh sách, bạn có thể viết như sau:

import os

# Store all files in subdirectories in a list
folder_path = "sample_folder"
all_files = []

for root, dirs, files in os.walk(folder_path):
    for file in files:
        all_files.append(os.path.join(root, file))

print("All files in subdirectories:")
print(all_files)

Truy xuất chỉ các tệp có phần mở rộng cụ thể

Ví dụ, nếu bạn chỉ muốn truy xuất các tệp .txt, hãy thêm điều kiện sau:

import os

# Retrieve files with a specific extension in subdirectories
folder_path = "sample_folder"
txt_files = []

for root, dirs, files in os.walk(folder_path):
    for file in files:
        if file.endswith(".txt"):
            txt_files.append(os.path.join(root, file))

print("Text files:")
print(txt_files)

Truy xuất đệ quy sử dụng mô-đun glob

Bạn có thể dễ dàng thực hiện tìm kiếm đệ quy bằng cách sử dụng ** từ mô-đun glob.

import glob

# Recursively retrieve all files
folder_path = "sample_folder"
all_files = glob.glob(f"{folder_path}/**/*", recursive=True)

print("Files retrieved recursively:")
print(all_files)

Cũng rất đơn giản để truy xuất chỉ các tệp có phần mở rộng cụ thể.

import glob

# Recursively retrieve files with a specific extension
folder_path = "sample_folder"
txt_files = glob.glob(f"{folder_path}/**/*.txt", recursive=True)

print("Text files retrieved recursively:")
print(txt_files)

Truy xuất đệ quy sử dụng mô-đun pathlib

Phương thức rglob() của mô-đun pathlib cung cấp cách truy xuất tệp đệ quy một cách trực quan.

from pathlib import Path

# Recursively retrieve all files
folder_path = Path("sample_folder")
all_files = list(folder_path.rglob("*"))

print("Files retrieved recursively:")
print(all_files)

Cũng dễ dàng để chỉ định một phần mở rộng cụ thể.

from pathlib import Path

# Recursively retrieve files with a specific extension
folder_path = Path("sample_folder")
txt_files = list(folder_path.rglob("*.txt"))

print("Text files retrieved recursively:")
print(txt_files)

So sánh các phương pháp

Phương thức

Đặc điểm

Ưu điểm

Xem xét

os.walk()

Triển khai duyệt tệp đệ quy thủ công

Có thể tùy chỉnh cao

Code có thể trở nên dài

glob

Cho phép biểu thức ngắn gọn dựa trên ký tự đại diện

Cho phép tìm kiếm đệ quy với mã ngắn

Yêu cầu tạo mẫu wildcard phù hợp

pathlib.rglob()

Cho phép phong cách hướng đối tượng, Pythonic

Rất dễ đọc và phù hợp với mã Python hiện đại

Chỉ có sẵn trên Python 3.4 trở lên

6. Lọc Tên Tệp Theo Các Điều Kiện Cụ Thể Và Các Trường Hợp Sử Dụng

Việc lọc tệp theo các điều kiện cụ thể giúp tổ chức danh sách tên tệp đã truy xuất và hữu ích khi thực hiện các hoạt động dữ liệu cho một mục đích cụ thể. Phần này giải thích cách thu hẹp tệp trong Python bằng cách sử dụng phần mở rộng tệp, tên tệp và biểu thức chính quy.

Lọc Theo Phần Mở Rộng Tệp

Để lấy chỉ các tệp có phần mở rộng được chỉ định, bạn có thể sử dụng list comprehensions hoặc kiểm tra điều kiện. Ví dụ: Sử dụng mô-đun os

import os

# Get files with the specified extension
folder_path = "sample_folder"
txt_files = [f for f in os.listdir(folder_path) if f.endswith(".txt")]

print("Text files:")
print(txt_files)

Ví dụ: Sử dụng mô-đun pathlib Sử dụng mô-đun pathlib, bạn có thể viết lọc phần mở rộng một cách ngắn gọn hơn.

from pathlib import Path

# Get files with the .txt extension
folder_path = Path("sample_folder")
txt_files = [f for f in folder_path.iterdir() if f.suffix == ".txt"]

print("Text files:")
print(txt_files)

Khi Tên Tệp Chứa Một Chuỗi Cụ Thể

Để xác định xem tên tệp có chứa một chuỗi cụ thể hay không, hãy sử dụng toán tử in.

import os

# Get files whose names contain 'report'
folder_path = "sample_folder"
report_files = [f for f in os.listdir(folder_path) if "report" in f]

print("Files containing 'report':")
print(report_files)

Lọc Nâng Cao Sử Dụng Biểu Thức Chính Quy

Sử dụng biểu thức chính quy cho phép bạn lọc tệp với các điều kiện linh hoạt hơn. Ví dụ, nó hữu ích khi tìm kiếm các mẫu cụ thể trong tên tệp.

import os
import re

# Get files whose names consist only of digits
folder_path = "sample_folder"
pattern = re.compile(r"^d+$")

files = [f for f in os.listdir(folder_path) if pattern.match(f)]

print("File names consisting only of digits:")
print(files)

Lọc Theo Kích Thước Tệp

Nếu bạn muốn lọc theo kích thước tệp, hãy sử dụng os.path.getsize().

import os

# Get files that are 1 MB or larger
folder_path = "sample_folder"
large_files = [f for f in os.listdir(folder_path) if os.path.getsize(os.path.join(folder_path, f)) > 1 * 1024 * 1024]

print("Files 1 MB or larger:")
print(large_files)

Ví dụ thực tế

Để nhóm các tệp theo nhiều phần mở rộng, bạn có thể viết như sau.

import os

# Categorize files by extension
folder_path = "sample_folder"
files_by_extension = {}

for f in os.listdir(folder_path):
    ext = os.path.splitext(f)[1]  # Get the extension
    if ext not in files_by_extension:
        files_by_extension[ext] = []
    files_by_extension[ext].append(f)

print("Grouped by extension:")
print(files_by_extension)

2. Lọc theo ngày
Để lọc theo thời gian sửa đổi của tệp, sử dụng os.path.getmtime().

import os
import time

# Get files updated within the past week
folder_path = "sample_folder"
one_week_ago = time.time() - 7 * 24 * 60 * 60

recent_files = [f for f in os.listdir(folder_path) if os.path.getmtime(os.path.join(folder_path, f)) > one_week_ago]

print("Recently updated files:")
print(recent_files)

Các trường hợp sử dụng và tiện ích của mỗi phương pháp

Filter Condition

Usage

Purpose

File extension

f.endswith(".txt")

Classify by file type

Specific substring

"keyword" in f

Find files related to a specific purpose

Regular expressions

re.match(pattern, f)

Search for files with complex name patterns

File size

os.path.getsize()

Detect large files

Modification date/time

os.path.getmtime()

Find recently used files

7. Ví dụ thực tế: Cách sử dụng danh sách tên tệp đã truy xuất

Cách bạn sử dụng danh sách tên tệp đã truy xuất có thể rất đa dạng tùy thuộc vào nhu cầu và mục tiêu của bạn. Trong phần này, chúng tôi sẽ giới thiệu các trường hợp sử dụng phổ biến và một số ví dụ mã cụ thể.

Xử lý hàng loạt nội dung tệp

Đây là một ví dụ về việc sử dụng danh sách tệp đã truy xuất để đọc và xử lý nội dung của từng tệp.
Ví dụ: Đọc nội dung của các tệp văn bản hàng loạt

import os

# Get text files in the folder
folder_path = "sample_folder"
text_files = [f for f in os.listdir(folder_path) if f.endswith(".txt")]

# Read all file contents in bulk
all_content = ""
for file in text_files:
    with open(os.path.join(folder_path, file), "r", encoding="utf-8") as f:
        all_content += f.read() + "
"

print("Contents of all text files:")
print(all_content)

Đổi tên tệp

Bạn có thể sử dụng danh sách tên tệp đã truy xuất để đổi tên tệp hàng loạt.
Ví dụ: Thêm tiền tố vào tên tệp

import os

# Get files in the folder
folder_path = "sample_folder"
files = os.listdir(folder_path)

# Add a prefix to file names
for file in files:
    old_path = os.path.join(folder_path, file)
    new_path = os.path.join(folder_path, f"new_{file}")
    os.rename(old_path, new_path)

print("Renamed the files.")

Lưu danh sách tệp

Cũng hữu ích khi lưu danh sách tên tệp đã truy xuất vào một tệp bên ngoài (tệp văn bản hoặc Excel) để bạn có thể xem lại sau.
Ví dụ: Lưu danh sách tên tệp vào tệp văn bản

import os

# Get files in the folder
folder_path = "sample_folder"
files = os.listdir(folder_path)

# Save file names to a text file
with open("file_list.txt", "w", encoding="utf-8") as f:
    for file in files:
        f.write(file + "
")

print("Saved the file name list.")

Ví dụ: Lưu danh sách tên tệp dưới dạng CSV

import os
import csv

# Get files in the folder
folder_path = "sample_folder"
files = os.listdir(folder_path)

# Save file names to a CSV
with open("file_list.csv", "w", encoding="utf-8", newline="") as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(["File Name"])  # Add header
    for file in files:
        writer.writerow([file])

print("Saved the file name list to CSV.")

Tạo bản sao lưu tệp

Đây là một ví dụ về việc sử dụng danh sách tên tệp để tạo bản sao lưu các tệp trong một thư mục chỉ định.

import os
import shutil

# Get files in the folder
source_folder = "sample_folder"
backup_folder = "backup_folder"
os.makedirs(backup_folder, exist_ok=True)

files = os.listdir(source_folder)

# Copy files to the backup folder
for file in files:
    shutil.copy(os.path.join(source_folder, file), os.path.join(backup_folder, file))

print("Backup created.")

Hạn chế xử lý cho các tệp cụ thể

Sử dụng danh sách tệp đã truy xuất để thực hiện xử lý chỉ trên các tệp đáp ứng các điều kiện cụ thể.
Ví dụ: Xóa các tệp có phần mở rộng cụ thể

import os

# Delete files in the folder with a specific extension
folder_path = "sample_folder"
files = [f for f in os.listdir(folder_path) if f.endswith(".tmp")]

for file in files:
    os.remove(os.path.join(folder_path, file))

print("Deleted unnecessary files.")

Các Kịch Bản Nâng Cao

  • Thu thập dữ liệu : Thu thập nhiều tệp CSV và hợp nhất dữ liệu của chúng.
  • Quản lý nhật ký : Xác định và xóa các tệp nhật ký cũ.
  • Xử lý hình ảnh : Thay đổi kích thước hoặc chuyển đổi hình ảnh trong một thư mục cụ thể.

8. Khắc Phục Sự Cố: Mẹo Giải Quyết Lỗi

Khi thực hiện các thao tác với tệp hoặc lấy tên tệp trong các thư mục, có thể xảy ra nhiều lỗi khác nhau. Phần này giải thích các lỗi phổ biến và cách khắc phục chúng.

Lỗi 1: Không Tìm Thấy Thư Mục

Khi xảy ra
Nếu thư mục được chỉ định không tồn tại, sẽ xảy ra FileNotFoundError.

Nguyên Nhân

  • Đường dẫn thư mục không chính xác.
  • Thư mục đã bị xóa.

Cách Khắc Phục

  • Kiểm tra xem thư mục có tồn tại hay không bằng cách sử dụng os.path.exists() hoặc pathlib.Path.exists() .

Ví dụ: Mã kiểm tra xem thư mục có tồn tại không

import os

folder_path = "sample_folder"

if not os.path.exists(folder_path):
    print(f"Error: Folder not found ({folder_path})")
else:
    print("The folder exists.")

Lỗi 2: Lỗi Quyền Khi Thao Tác Với Tệp

Khi xảy ra
Khi cố gắng đọc hoặc ghi một tệp, sẽ xảy ra PermissionError.

Nguyên Nhân

  • Không có quyền truy cập vào tệp hoặc thư mục.
  • Tệp bị khóa bởi một tiến trình khác.

Cách Khắc Phục

  • Kiểm tra và sửa quyền truy cập.
  • Đảm bảo tệp không đang được sử dụng.

Ví dụ: Xử lý lỗi quyền truy cập

import os

file_path = "sample_folder/sample_file.txt"

try:
    with open(file_path, "r", encoding="utf-8") as f:
        content = f.read()
        print(content)
except PermissionError:
    print(f"Error: You don't have permission to access the file ({file_path})")

Lỗi 3: Đường Dẫn Tệp Quá Dài

Khi xảy ra
Trên Windows, lỗi có thể xảy ra khi đường dẫn vượt quá 260 ký tự.

Cách Khắc Phục

  • Bật cài đặt Windows hỗ trợ đường dẫn dài.
  • Rút ngắn tên tệp hoặc thư mục.

Ví dụ: Mã rút ngắn đường dẫn

import os

# Shorten a long path
long_path = "a/very/long/path/to/a/folder/with/a/long/file_name.txt"
short_path = os.path.basename(long_path)
print(f"Shortened path: {short_path}")

Lỗi 4: Xử Lý Tên Tệp Có Ký Tự Đặc Biệt

Khi xảy ra
Lỗi có thể xảy ra nếu tên tệp chứa ký tự đặc biệt (ví dụ: dấu cách, ký hiệu đặc biệt, hoặc ký tự không phải ASCII).

Cách Khắc Phục

  • Chuẩn hoá tên tệp.
  • Loại bỏ hoặc thay thế các ký tự không phải ASCII.

Ví dụ: Mã chuẩn hoá tên tệp

import os

file_path = "sample_folder/sample file!.txt"
normalized_file_path = file_path.replace(" ", "_").replace("!", "")
print(f"Normalized filename: {normalized_file_path}")

Lỗi 5: Hết Bộ Nhớ

Khi xảy ra
Khi xử lý các thư mục rất lớn, bạn có thể hết bộ nhớ và gặp lỗi.

Cách Khắc Phục

  • Xử lý tệp theo các lô nhỏ hơn thay vì một lúc.
  • Sử dụng generator khi tạo danh sách tệp.

Ví dụ: Xử lý bằng generator

import os

def get_files(folder_path):
    for root, _, files in os.walk(folder_path):
        for file in files:
            yield os.path.join(root, file)

folder_path = "sample_folder"
for file in get_files(folder_path):
    print(f"Processing: {file}")

Lỗi 6: Tệp Bị Khóa

Khi xảy ra
Một ứng dụng cụ thể có thể đã mở tệp, ngăn việc xóa hoặc chỉnh sửa.

Cách Khắc Phục

  • Xác định và kết thúc tiến trình đang sử dụng tệp.
  • Đợi cho đến khi tệp được giải phóng.

Lỗi 7: UnicodeDecodeError

Khi xảy ra
Xảy ra khi mã hoá của tệp không xác định.

Cách Khắc Phục

  • Mở tệp với mã hoá rõ ràng.
  • Phát hiện mã hoá bằng thư viện chardet.

Ví dụ: Mở tệp với mã hoá được chỉ định

import os

file_path = "sample_folder/sample_file.txt"

try:
    with open(file_path, "r", encoding="utf-8") as f:
        content = f.read()
        print(content)
except UnicodeDecodeError:
    print(f"Error: Unknown file encoding ({file_path})")

Tóm tắt

Bằng cách sử dụng các bước khắc phục sự cố này, bạn có thể giải quyết hiệu quả các lỗi xảy ra trong quá trình thao tác tệp và cải thiện độ tin cậy của các script của mình.

9. Tóm tắt

Bài viết này giải thích cách lấy tên tệp trong một thư mục bằng Python, từ những kiến thức cơ bản đến các ứng dụng thực tiễn. Chúng tôi đã xem xét các tính năng và trường hợp sử dụng phù hợp của mỗi phương pháp và tóm tắt phương pháp nên chọn.

Các tính năng của các phương pháp và khi nào nên sử dụng

Phương thứcTính năngTrường hợp sử dụng
os module

– Phần của thư viện chuẩn và dễ sử dụng.

Tuyệt vời cho việc xử lý thư mục nhỏ hoặc truy xuất tệp cơ bản.

– Đối với tìm kiếm đệ quy, hãy sử dụng os.walk()

Khi bạn cần thao tác trên các tệp, bao gồm cả thư mục con.

glob module

– Cho phép tìm kiếm mẫu linh hoạt với ký tự đại diện.

Khi bạn muốn tìm kiếm hiệu quả theo phần mở rộng tệp hoặc mẫu tên.

– Tìm kiếm đệ quy có thể với recursive=True

Tìm kiếm các tệp trong các thư mục con đáp ứng tiêu chí cụ thể.

pathlib module

– Cho phép mã hiện đại, hướng đối tượng.

Khi bạn đang sử dụng Python 3.4+ và độ đọc hiểu quan trọng.

– Bạn có thể tìm kiếm tệp tin một cách đệ quy và trực quan với rglob()

Khi bạn muốn viết các thao tác thư mục ngắn gọn bao gồm cả thư mục con.

Tổng quan các ví dụ sử dụng

  • Tạo danh sách tệp : Sử dụng mô-đun os và mô-đun glob để liệt kê tất cả các tệp trong một thư mục.
  • Lọc theo điều kiện cụ thể : Sử dụng phần mở rộng, tên hoặc biểu thức chính quy để chọn chỉ những tệp bạn cần.
  • Xử lý hàng loạt : Sử dụng danh sách tệp đã thu được để tối ưu việc đọc và ghi nội dung tệp.
  • Các thao tác nâng cao : Đổi tên, tạo bản sao lưu, xóa các tệp không cần thiết, v.v.

Tầm quan trọng của việc khắc phục sự cố

Chúng tôi cũng đề cập đến các lỗi thường gặp khi thực hiện các thao tác với tệp. Việc chú ý đến các yếu tố sau có thể cải thiện độ tin cậy của script:

  • Kiểm tra sự tồn tại của tệp và thư mục trước khi thực hiện.
  • Xem xét quyền truy cập và xử lý các ký tự đặc biệt.
  • Nhận thức về thiếu bộ nhớ và các vấn đề hiệu năng khi xử lý số lượng tệp lớn.

Lợi ích của việc thành thạo việc lấy tên tệp trong Python

Việc lấy tên tệp trong các thư mục bằng Python hữu ích trong nhiều tình huống. Cụ thể, nó mang lại các ưu điểm sau:

  1. Tăng hiệu quả : Tự động hoá các công việc thường ngày và tổ chức dữ liệu.
  2. Linh hoạt : Khả năng thao tác trên tệp trong nhiều điều kiện khác nhau.
  3. Mở rộng : Có thể xử lý các bộ dữ liệu từ quy mô nhỏ đến quy mô lớn.

Kết luận

Python cung cấp đa dạng các mô-đun và tính năng. Bằng cách lựa chọn phù hợp giữa các mô-đun đã giới thiệu ở đây — os, globpathlib — bạn có thể tối đa hoá hiệu quả và độ chính xác trong các thao tác với tệp. Hy vọng bài viết này giúp người mới bắt đầu và người dùng trung cấp nâng cao kỹ năng xử lý tệp bằng Python. Hãy thử áp dụng các kỹ thuật này trong các dự án thực tế hoặc tại nơi làm việc để cảm nhận sự hữu ích của Python!

RUNTEQ(ランテック)|超実戦型エンジニア育成スクール