Python FileNotFoundError: [Errno 2] No such file or directory hatasını çözmek için dosya yolunu, çalışma dizinini ve diskteki gerçek dosya adını birlikte kontrol etmelisin. Çözüm, Python’ın hangi konumu hedeflediğini görünür kılıp bu konumu dosyanın gerçek adıyla eşleştirmek ve gerekiyorsa göreli yolu düzeltmektir.
Dosya açma işlemi yine başarısız olursa yolu pathlib.Path ile test edebilir ve sorunu açıklayan bir hata mesajı üretebilirsin. Buradaki temel nokta, dosyanın her zaman Python betiğinin bulunduğu klasörde aranmadığını bilmektir.
FileNotFoundError neden oluşur ve Python dosyayı nerede arar?

Bu hata, Python’ın açmaya veya okumaya çalıştığı konumda istediği dosyayı bulamadığını gösterir. Dosya adı yanlış yazılmış olabilir, uzantı eksik olabilir ya da verilen yol farklı bir klasörü gösteriyor olabilir. Özellikle open() içinde yalnızca "veri.txt" gibi bir ad kullanıldığında Python bu göreli yolu çalışma dizinine göre yorumlar.
Çalışma dizini, programın başlatıldığı konumdur. Terminal veya geliştirme ortamı farklı bir çalışma dizini belirleyebileceği için dosya otomatik olarak betiğin bulunduğu klasörde aranmaz. Python’ın hangi klasörü kullandığını görmek için os.getcwd() veya Path.cwd() yöntemlerinden yararlanabilirsin:
from pathlib import Path
import os
print("os.getcwd():", os.getcwd())
print("Path.cwd():", Path.cwd())
Beklenen çıktı, aynı çalışma dizinini gösteren iki satırdır. Gösterilen konum, dosya yolunun başlangıç noktası olarak kullanılır.
Örneğin proje/app.py dosyasından data/girdi.txt dosyasını açtığını düşün. Çalışma dizini proje ise Python proje/data/girdi.txt konumunu arar. Ancak bir üst klasörden python proje/app.py komutuyla çalıştırırsan aynı göreli yol, bir üst klasördeki data klasörünü gösterir. Bu nedenle dosya betiğin yanında bulunsa bile göreli yol beklediğin konuma ulaşmayabilir.
Python temellerine yeni başlıyorsan ücretsiz Sıfırdan Temel Python video eğitimi temel kavramları çalışmak için başlangıç noktası olabilir. Dosya yolu hatasını çözerken ise asıl incelemen gereken üç bilgi, gerçek dosya adı, verilen yol ve çalışma dizinidir.
Dosya yolunu hangi sırayla kontrol etmelisin?
Hatanın kaynağını daha hızlı bulmak için kontrolleri aşağıdaki sırayla yapabilirsin:
- Dosya adını ve uzantısını doğrula. Kodda yazan ad ile klasördeki gerçek ad aynı olmalıdır.
.txt,.csvveya başka bir uzantının eksik olmadığını kontrol et. Büyük-küçük harf farkını da incele. - Çalışma dizinini yazdır.
Path.cwd()veyaos.getcwd()çıktısı, göreli yolun hangi klasörden başladığını gösterir. - Göreli ve mutlak yolu karşılaştır.
data/girdi.txtgibi göreli yol, çalışma dizinine bağlıdır. Mutlak yol ise dosyanın tam konumunu belirtir. Bu nedenle göreli yol farklı çalıştırma konumlarında farklı sonuç verebilir. - Dosya ile klasörü ayrı ayrı test et. Bir
Pathnesnesi oluşturduktan sonrapath.exists()ile yolun varlığını,path.is_file()ile hedefin gerçekten dosya olup olmadığını kontrol et. Gerekirsepath.parent.exists()ile üst klasörün varlığını da incele. - Açıklayıcı hata mesajı üret. Sorun devam ederse hata mesajında denenen yolu ve dosya adını göster. Böylece yalnızca “dosya bulunamadı” demek yerine Python’ın hangi konumu aradığını görebilirsin.
open(), dosyayı doğrudan açmak için kullanılan işlevdir. pathlib.Path ise yolu daha okunabilir biçimde oluşturup kontrol etmeyi sağlar. Başlangıç düzeyinde önce Path ile yolu oluşturmak, ardından exists() ve is_file() kontrollerini yapmak, son aşamada open() kullanmak sorunun kaynağını ayırmayı kolaylaştırır.
Farklı çalışma dizinlerinde dosya yolu nasıl doğru kurulur?

Şöyle bir klasör yapısı düşün: Betik proje/uygulama.py konumunda, içeriği Merhaba, Python! olan dosya ise proje/veri/notlar.txt konumunda. open("notlar.txt") bu örnekte doğru yolu göstermez. Çünkü göreli yol, betiğin bulunduğu klasöre değil, programın çalışma dizinine göre yorumlanır.
Terminalde proje klasöründeyken python uygulama.py komutunu çalıştırırsan open("notlar.txt"), proje/notlar.txt dosyasını arar. Projenin üst klasöründeyken python proje/uygulama.py komutunu çalıştırırsan bu kez üst klasörde notlar.txt arar. Gerçek dosya iki konumda da veri klasöründedir.
Dosyanın yeri betiğe göre sabitse yolu uygulama.py üzerinden kurabilirsin:
from pathlib import Path
dosya = Path(__file__).resolve().parent / "veri" / "notlar.txt"
print(dosya.read_text(encoding="utf-8"))
Beklenen çıktı: Merhaba, Python! Burada __file__ betik dosyasını, parent onun bulunduğu klasörü temel alır. Bu nedenle örnek, belirtilen iki farklı çalışma dizininden başlatıldığında da aynı dosya yolunu kurar. __file__ yaklaşımı, bir betik dosyasına göre konumlandırılmış veriler için uygundur; yolu özellikle çalışma dizinine göre seçmen gerekiyorsa bu temeli kullanma.
Bu ayrımı farklı klasör yapılarıyla denemek, dosya yolu pratiğini güçlendirebilir. birebir Python Özel Ders programında kişiye özel ödevlerle bu tür alıştırmalar üzerinde çalışılabilir.
try-except ile dosya bulunamadığında nasıl açıklayıcı bilgi verirsin?
Dosya bulunamadığında yalnızca FileNotFoundError hatasını yakala. Aşağıdaki örnek, aranan dosyanın adını, kullanılan yolu ve programın çalışma dizinini gösterir. Dosya okunması zorunluysa açıklamadan sonra raise ile hatayı yeniden yükseltir; böylece sorun sessizce geçiştirilmez.
from pathlib import Path
dosya = Path(__file__).resolve().parent / "veri" / "notlar.txt"
try:
print(dosya.read_text(encoding="utf-8"))
except FileNotFoundError:
print(f"Dosya bulunamadı: {dosya.name}")
print(f"Kullanılan yol: {dosya}")
print(f"Çalışma dizini: {Path.cwd()}")
raise
Dosya varsa: Çıktı Merhaba, Python! olur. Dosya eksikse: İlk açıklama satırı Dosya bulunamadı: notlar.txt olur; ardından kullanılan mutlak yol ve çalışma dizini görünür. Sonrasında Python hata izini gösterir.
Yol doğru görünmesine rağmen hata sürüyorsa veri klasörünün gerçekten uygulama.py ile aynı proje klasöründe olup olmadığını denetle. Dosyanın adını ve .txt uzantısını da klasörde görünen gerçek adla karşılaştır.
Dosya yolunu hangi klasöre göre kurduğunu bilmek ve hata anında aranan konumu görmek, sorunu adım adım incelemeni kolaylaştırır.