Berk Akademi
Ana Sayfa
ÖZEL KODLAMA DERSLERİ
Yazılım Özel Ders
Tüm birebir programlara genel bakış
Python Yazılım Kursu
Sıfırdan ileri seviyeye birebir Python
Java Yazılım Kursu
OOP odaklı birebir Java eğitimi
AP Computer Science Principles
AP CSP sınav hazırlığı
GRUP DERSLERİ
Python & Django Masterclass
SINIRLI KONTENJAN
Java & Spring Boot Masterclass
SINIRLI KONTENJAN
C# .NET Masterclass
SINIRLI KONTENJAN
VİDEO DERSLER
Sıfırdan Temel Python Kursu
Kendi Hızında Öğren
ÜCRETSİZ
Seviye Testi
Ücretsiz — Python, Java, algoritma seviye testleri
Kariyerini Keşfet
Sertifika Doğrula
Belge numarası ve soyad ile doğrulama

Python’da FileNotFoundError Hatasını Dosya Yolu ve pathlib ile Çözme

python-filenotfounderror-dosya-yolu-pathlib-cozumu
Bu yazıda neler var?
  1. FileNotFoundError Neden Oluşur? Önce Python’un Hangi Klasöre Baktığını Anlayın
  2. Üç Adımda Dosya Yolunu Teşhis Edin
  3. Üç Yaygın Hata Türünü Birbirinden Ayırın
  4. pathlib ile Betiğin Kendi Konumuna Göre Güvenilir Yol Kurun
  5. Kullanıcıdan ve Konfigürasyondan Gelen Yolları Nasıl Doğrulamalısınız?
  6. Sık Sorulan Sorular

Python FileNotFoundError hatası, Python’un aradığı dosyayı belirtilen yolda bulamadığı anlamına gelir. Dosya betikle aynı klasörde görünse bile program farklı bir çalışma dizininden başlatılmışsa göreli yol yanlış klasöre göre yorumlanabilir. Önce Python’un hangi klasöre baktığını kontrol etmek, ardından oluşturulan dosya yolunun gerçekten var olup olmadığını doğrulamak gerekir.

Python temelini bire bir çalışmak isteyenler için Python özel dersleri kapsamında dosya işlemleri, yollar ve hata ayıklama adım adım ele alınabilir. Ancak bu hatayı çözmenin ilk adımı, dosyanın nerede olduğundan önce programın hangi klasörü başlangıç noktası kabul ettiğini anlamaktır.

FileNotFoundError Neden Oluşur? Önce Python’un Hangi Klasöre Baktığını Anlayın

Python’da bir dosyayı yalnızca adıyla açarsanız, örneğin open("veri.txt") yazarsanız, bu yol göreli yol olarak değerlendirilir. Python, dosyayı çoğu durumda betik dosyasının bulunduğu klasöre göre değil, programın başlatıldığı mevcut çalışma dizinine göre arar.

Bu nedenle şu iki durum birbirinden farklıdır:

  • Betik konumu: Python kodunu içeren .py dosyasının fiziksel olarak bulunduğu klasördür.
  • Çalışma dizini: Program başlatılırken geçerli kabul edilen ve göreli yolların yorumlandığı klasördür.

Örneğin proje/ klasöründe hem main.py hem de veri.txt bulunabilir. Fakat terminalde başka bir klasördeyken main.py dosyasını farklı bir yoldan çalıştırırsanız veya geliştirme ortamının çalışma dizini proje klasöründen farklı ayarlanmışsa, open("veri.txt") beklediğiniz dosyayı bulamayabilir.

Mutlak yol, dosyanın kök konumdan başlayarak tam adresini ifade eder. Göreli yol ise mevcut çalışma dizinine göre tanımlanır. Mutlak yollar belirli bir bilgisayara veya kullanıcı klasörüne bağımlı olabileceği için taşınabilir projelerde sorun çıkarabilir. Göreli yollar daha esnektir; ancak hangi çalışma dizinine göre yorumlandıkları mutlaka bilinmelidir.

Terminalden çalıştırma ile bir IDE veya kod çalıştırma aracındaki “çalıştır” işlemi aynı çalışma dizinini kullanmayabilir. Bu fark, kullanılan araca göre değişen bir ayardan, proje yapılandırmasından veya komutun çalıştırıldığı klasörden kaynaklanabilir. Dolayısıyla dosyanın aynı klasörde olup olmadığını kontrol etmeden önce çalışma dizinini yazdırmak gerekir.

Üç Adımda Dosya Yolunu Teşhis Edin

Üç Adımda Dosya Yolunu Teşhis Edin

FileNotFoundError hatasını tahmin ederek düzeltmek yerine, Python’un gördüğü yolu ve bu yolun dosya sistemindeki durumunu sırayla kontrol edin. Aşağıdaki üç aşama, yanlış çalışma dizini ile hatalı dosya adını birbirinden ayırmayı sağlar.

  1. os.getcwd() ile mevcut çalışma dizinini yazdırın. Bu değer beklediğiniz klasör değilse, göreli dosya yolu yanlış konumda aranıyordur. Önce terminalde doğru klasöre geçin veya çalıştırma yapılandırmasındaki çalışma dizinini düzeltin.
  2. Path(...).exists() ile hedef yolun gerçekten var olup olmadığını kontrol edin. Sonuç False ise dosya adı, dosya uzantısı, klasör adı veya hedef konum hatalı olabilir. Sonuç True ise sorun artık doğrudan “dosya yok” probleminden farklı bir aşamada aranmalıdır.
  3. String birleştirme yerine pathlib ile işletim sistemine duyarlı yol kurun. Klasör ve dosya adlarını elle "/" veya "" ile birleştirmek yerine Path nesnesinin / operatörünü kullanın.

Teşhis sırasında mevcut çalışma dizinini, oluşturulan hedef yolu ve exists() sonucunu birlikte yazdırmak yararlıdır:

import os
from pathlib import Path

print("Çalışma dizini:", os.getcwd())

hedef = Path("veriler") / "veri.txt"
print("Oluşturulan yol:", hedef)
print("Dosya var mı?:", hedef.exists())

Çıktıdaki çalışma dizini beklenenden farklıysa problem büyük olasılıkla göreli yolun yanlış başlangıç noktasına göre yorumlanmasıdır. Çalışma dizini doğru olduğu hâlde exists() sonucu False veriyorsa dosya adı, uzantı veya klasör yapısı kontrol edilmelidir. Özellikle veri.txt ile veri.csv gibi uzantı farkları ve büyük-küçük harf ayrımı gözden kaçabilir.

Üç Yaygın Hata Türünü Birbirinden Ayırın

Üç Yaygın Hata Türünü Birbirinden Ayırın

FileNotFoundError aldığınızda sorun her zaman dosyanın silinmiş olması değildir. Python’un baktığı çalışma dizini farklı olabilir, dosya adı gerçekten yanlış olabilir veya Windows yolu bir Python kaçış karakteri nedeniyle bozulmuş olabilir. Önce hata mesajını gizlemek yerine oluşturduğunuz yolun ekrana nasıl yansıdığını ve dosyanın bulunup bulunmadığını görünür hâle getirin.

Hata türü Tipik belirti Nasıl doğrulanır? Kalıcı çözüm
Yanlış çalışma dizini Dosya gerçekten proje klasöründe olduğu hâlde göreli yol bulunamaz. Path.cwd() ile Python’un hangi klasörde çalıştığını kontrol edin. Göreli yolu bilinçli kullanın veya yolu betiğin konumuna göre oluşturun.
Var olmayan dosya ya da yanlış ad Klasör doğru olsa bile dosya adı, uzantı veya büyük-küçük harf uyuşmaz. Path.exists() sonucunu ve klasör içeriğini kontrol edin. Dosya adını ve uzantıyı doğrulayın; yolu parçalara ayırarak kurun.
Kaçış karakteriyle bozulmuş Windows yolu Yol ekrana beklenenden farklı çıkar veya satır bölünmesi görülür. repr(yol) ve normal print(yol) çıktısını karşılaştırın. pathlib kullanın; ham string veya doğru kaçışlama tercih edin.

Yanlış çalışma dizini

open("data/notlar.txt") gibi bir göreli yol, dosyanın Python dosyasıyla aynı klasörde olduğunu varsaymaz. Yol, programın başlatıldığı current working directory üzerinden değerlendirilir. IDE, terminal veya test aracı programı farklı bir klasörden çalıştırırsa dosya proje içinde bulunsa bile hata oluşabilir. Bu durumu Path.cwd() ile teşhis etmek, tahmin yürütmekten daha güvenlidir.

Gerçekten var olmayan dosya

Çalışma dizini doğruysa dosya adını kontrol edin. .txt uzantısının gizlenmiş olması, dosya adında yazım hatası bulunması veya klasör adının farklı yazılması sık karşılaşılan nedenlerdir. Göreli yollar, çalıştırma konumuna bağımlı olduğu için; mutlak yollar ise bilgisayar, kullanıcı hesabı veya proje konumu değiştiğinde kırılabildiği için dikkatli kullanılmalıdır.

Windows ters bölü çizgisinin kaçış karakteri olarak yorumlanması

Python string’lerinde ters bölü çizgisi () özel anlam taşıyabilir. Örneğin "data otlar.txt" ifadesindeki , Windows klasör ayıracı olarak değil, yeni satır kaçış karakteri olarak yorumlanır. print(yol) çıktısı beklenmedik biçimde iki satıra bölünebilir. String birleştirme ile bu tür hataları yönetmek zorlaşırken, pathlib yol parçalarını doğrudan / operatörüyle birleştirerek daha okunabilir bir yaklaşım sunar.

pathlib ile Betiğin Kendi Konumuna Göre Güvenilir Yol Kurun

Çalışma dizinine bağlı kalmak yerine yolu, çalışan Python dosyasının bulunduğu klasörden başlatabilirsiniz. Aşağıdaki örnek proje klasöründeki data dizininden notlar.txt dosyasını okur:

from pathlib import Path

def main():
    proje_klasoru = Path(__file__).parent
    dosya_yolu = proje_klasoru / "data" / "notlar.txt"

    if not dosya_yolu.exists():
        print(f"Dosya bulunamadı: {dosya_yolu}")
        return

    icerik = dosya_yolu.read_text(encoding="utf-8")
    print(icerik)

if __name__ == "__main__":
    main()

data/notlar.txt mevcutsa program dosyanın içeriğini yazdırır. Dosya bilerek silinir veya adı değiştirilirse şu biçimde anlaşılır bir mesaj görürsünüz:

Dosya bulunamadı: .../data/notlar.txt

Buradaki Path(__file__).parent, başlangıç noktasını betiğin bulunduğu klasöre bağlar. / operatörü ise yol parçalarını işletim sisteminin yol kurallarına göre birleştirir; elle ters bölü çizgi eklemekten daha az hata riski taşır. exists() ile okuma işleminden önce kontrol yapılması da hatanın kaynağını görünür kılar. Python dosya işlemlerini uygulamalı tekrar etmek isteyenler, Python dosya işlemlerini uygulamalı tekrar etmek isteyenler için video eğitimlerde aynı yaklaşımı farklı örneklerle pekiştirebilir.

Kullanıcıdan ve Konfigürasyondan Gelen Yolları Nasıl Doğrulamalısınız?

Dosya yolu kullanıcı girdisinden, komut satırından veya bir konfigürasyon dosyasından geliyorsa doğrudan read_text() çağırmak yerine önce yolu doğrulayın. Böylece var olmayan dosya, klasör yerine dosya beklenmesi ve yanlış çalışma dizini gibi durumları birbirinden ayırabilirsiniz. Bu yaklaşım yalnızca FileNotFoundError teşhisi için değil, kodun bakımını kolaylaştırmak için de önemlidir.

  • Gelen değeri Path nesnesine dönüştürün.
  • exists() ile hedef yolun mevcut olup olmadığını kontrol edin.
  • is_file() ile yolun gerçekten dosyaya işaret ettiğini doğrulayın.
  • Göreli yol kullanılıyorsa programın hangi çalışma dizininde başlatıldığını değerlendirin.
  • Uygulamanın beklediği kök klasörün dışına çıkılmadığını kontrol edin.
  • Hata mesajında yalnızca kullanıcının yazdığı ifadeyi değil, Python’un oluşturduğu gerçek yolu da gösterin.
  • Öngörülen durumları ayrı ayrı ele alın; geniş bir try-except bloğuyla bütün hataları gizlemeyin.

Örneğin exists() sonucu False ise dosya bulunamamıştır. Sonuç True olduğu hâlde is_file() sonucu False ise verilen yol büyük olasılıkla bir klasördür. Bu ayrım, kullanıcıya “dosya bulunamadı” demek yerine sorunun gerçek nedenini açıklamanızı sağlar.

Beklenen kök klasör kontrolü özellikle dışarıdan alınan yollarda yararlıdır. Kullanıcının yalnızca uygulamanın belirli bir klasörü içindeki dosyalara erişmesi gerekiyorsa, oluşturulan yolun bu sınır içinde kalıp kalmadığı ayrıca değerlendirilmelidir. Bu konu güvenlik boyutu taşısa da burada temel hedef, hatalı yolun neden FileNotFoundError oluşturduğunu görünür hâle getirmektir. Temel seviyenizi kontrol etmek için Python bilgi seviyesini ölçen ücretsiz test sayfasını kullanabilirsiniz.

  1. “Dosya aynı klasörde mi?” sorusundan önce “Program hangi çalışma dizininde?” sorusunu sorun.
  2. Path ile hangi hedef yolu oluşturduğunuzu kontrol edin.
  3. exists() ve gerekiyorsa is_file() sonuçlarını inceleyin.

Sık Sorulan Sorular

Dosya Python betiğiyle aynı klasörde olduğu hâlde neden FileNotFoundError alıyorum?

Göreli yollar betiğin bulunduğu klasöre göre değil, programın başlatıldığı çalışma dizinine göre değerlendirilir. os.getcwd() ile çalışma dizinini yazdırın; betiğin konumuna göre yol kurmanız gerekiyorsa Path(__file__).parent kullanın.

os.getcwd() ile Path(__file__).parent arasındaki fark nedir?

os.getcwd() programın çalıştırıldığı anki çalışma dizinini gösterir. Path(__file__).parent ise Python dosyasının bulunduğu klasörü temel alır. Bu iki konum aynı olmak zorunda değildir.

Windows dosya yollarında ters bölü çizgisi neden hata oluşturabilir?

Python dizelerinde ters bölü çizgisi kaçış karakteri olarak yorumlanabilir. Bu nedenle yol ifadelerinde ham dizeler, ileri bölü çizgiler veya pathlib kullanmak daha güvenlidir.

pathlib kullanırken exists() ve is_file() kontrolleri birlikte yapılmalı mı?

Dosya okunacaksa birlikte yapılması yararlıdır. exists() yolun bulunduğunu, is_file() ise bu yolun klasör değil dosya olduğunu gösterir.

Kullanıcıdan alınan dosya yolunu Python’da nasıl güvenli biçimde doğrularım?

Girdiyi Path nesnesine dönüştürün, exists() ve is_file() sonuçlarını kontrol edin, gerekiyorsa beklenen kök klasör sınırını doğrulayın. Hataları ayrı ve açıklayıcı mesajlarla yönetin.

Doğru teşhis için dosyanın nerede göründüğünden önce Python’un hangi yolu değerlendirdiğini inceleyin; ardından oluşturulan Path nesnesini ve kontrol sonuçlarını doğrulayın.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin — Yazılım Geliştirici ve Eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; bugün öğrencinin seviyesine ve hedefine göre şekillenen sürdürülebilir öğrenme sistemleri tasarlıyor. 500'den fazla kişiye ezber değil, düşünerek kod yazmayı öğretti — Berk Akademi'de izlemeye değil üretmeye dayalı öğrenme kültürünü o kuruyor.

WhatsApp Hemen Ara