Giải quyết triệt để lỗi 'FileNotFoundError: [Errno 2]' trong Python

mới bắt đầu🐍 Python2026-05-20| Python 3.x (Windows, macOS, Linux)

Error Message

FileNotFoundError: [Errno 2] No such file or directory: 'path/to/file.txt'
#python#debugging#pathlib#xử-lý-tệp

Thực tế gây ức chế về đường dẫn tệp

Đây là một tình huống kinh điển. Bạn có một tệp data.csv nằm cùng thư mục với script main.py. Bạn chạy mã, mong đợi tệp được nhập thành công, nhưng Python lại khăng khăng rằng tệp không tồn tại. Điều này thường xảy ra vì terminal của bạn đang "đứng" ở một thư mục khác với script của bạn.

Lỗi trông như thế này và nó có thể làm gián đoạn công việc của bạn ngay lập tức:

FileNotFoundError: [Errno 2] No such file or directory: 'data.csv'

Lý do ẩn sau: Thư mục làm việc của bạn

Nguyên nhân phổ biến nhất không phải là thiếu tệp; mà là do hiểu sai về Thư mục làm việc hiện tại (CWD - Current Working Directory). Khi bạn sử dụng đường dẫn tương đối như 'data.csv', Python không tìm ở nơi script tọa lạc. Thay vào đó, nó tìm trong thư mục nơi bạn thực hiện lệnh chạy.

Hãy tưởng tượng script của bạn nằm ở C:/Projects/App/script.py. Nếu terminal của bạn đang mở tại C:/Users/Admin/ và bạn chạy python Projects/App/script.py, Python sẽ tìm dữ liệu trong C:/Users/Admin/data.csv. Nó sẽ không tìm thấy.

Các nguyên nhân phổ biến khác bao gồm:

  • Phần mở rộng bị ẩn: Tệp của bạn thực chất có tên là data.csv.csv vì Windows đã ẩn phần mở rộng đã biết.
  • Phân biệt chữ hoa chữ thường: Data.csvdata.csv là hai tệp khác nhau trên Linux và macOS.
  • Ký tự thoát (Escape characters): Sử dụng một dấu gạch chéo ngược trong đường dẫn Windows (như "C:\users\name") thường gây ra lỗi.

Chẩn đoán nhanh

Trước khi bạn thay đổi cấu trúc tệp, hãy xem chính xác nơi Python đang tìm kiếm. Thêm các dòng này vào ngay đầu script của bạn để làm sáng tỏ sự thật:

import os
print(f"Python hiện đang tìm kiếm tại: {os.getcwd()}")

Nếu đường dẫn đó không khớp với vị trí tệp của bạn, các đường dẫn tương đối sẽ luôn thất bại. Bạn có thể khắc phục ngay lập tức bằng cách sử dụng đường dẫn tuyệt đối đầy đủ, mặc dù cách này kém linh hoạt hơn:

# Đường dẫn cố định để kiểm tra nhanh
with open('/Users/alex/projects/data/config.json', 'r') as f:
    print(f.read())

Giải pháp tốt nhất: Pathlib (Tiêu chuẩn hiện đại)

Module pathlib là cách thông minh nhất để xử lý tệp trong Python hiện đại. Nó coi các đường dẫn là đối tượng thay vì chuỗi ký tự, giúp việc thao tác dễ dàng hơn nhiều. Để tìm một tệp tương đối so với script của bạn — bất kể bạn chạy nó từ đâu — hãy sử dụng mẫu này:

from pathlib import Path

# Tìm thư mục nơi script này thực sự tọa lạc
BASE_DIR = Path(__file__).resolve().parent

# Kết hợp thư mục với tên tệp của bạn một cách an toàn
file_path = BASE_DIR / "data" / "results.csv"

with open(file_path, 'r') as f:
    data = f.read()

Phương pháp 'os' đáng tin cậy

Nếu bạn đang làm việc trên một mã nguồn cũ hoặc thích module os hơn, bạn vẫn có thể xây dựng các đường dẫn động. Phương pháp này tính toán đường dẫn tuyệt đối đến script của bạn tại thời điểm thực thi, đảm bảo tìm thấy tệp ngay cả khi bạn di chuyển thư mục dự án.

import os

# Tính toán thư mục của tệp hiện tại
script_dir = os.path.dirname(os.path.abspath(__file__))
file_path = os.path.join(script_dir, 'data', 'results.csv')

if os.path.exists(file_path):
    with open(file_path, 'r') as f:
        print("Đã tìm thấy và mở tệp thành công!")
else:
    print(f"Tìm kiếm thất bại tại: {file_path}")

Lưu ý về dấu gạch chéo ngược trên Windows

Đường dẫn Windows nổi tiếng với các lỗi vì \ là một ký tự thoát. Ví dụ, "C:\new\test.txt" thất bại vì \n được hiểu là một dòng mới. Bạn có hai cách sạch sẽ để khắc phục điều này:

  • Chuỗi thô (Raw Strings): Đặt chữ r trước dấu ngoặc kép: r"C:\users\data.txt".
  • Dấu gạch chéo xuôi: Sử dụng "C:/users/data.txt". Python xử lý điều này hoàn hảo trên Windows.

Kiểm tra lần cuối

  • In đường dẫn: Luôn in biến đường dẫn cuối cùng của bạn trước khi gọi open() để xem chính xác những gì Python thấy.
  • Xác minh phần mở rộng: Kiểm tra thuộc tính tệp để đảm bảo bạn không vô tình đặt tên tệp là script.py.txt.
  • Kiểm tra quyền: Đảm bảo tài khoản người dùng của bạn có quyền đọc thư mục đích.

Related Error Notes