Python

Python’da Dosya Okuma ve Yazma

Python'da Dosya Okuma ve Yazma

Yazılım geliştirme süreçlerinde verilerin kalıcı olarak saklanması ve gerektiğinde yeniden işlenmesi en temel ihtiyaçlardan biridir. Çalışan bir program sonlandığında bellekteki (RAM) tüm değişkenler silinir. Bu verilerin sonraki çalıştırmalarda da kullanılabilmesi için disk üzerinde depolanması gerekir. Python, işletim sistemi düzeyinde dosya giriş/çıkış (I/O) işlemlerini gerçekleştirmek için kullanımı kolay, esnek ve güvenli yerleşik araçlar sunar.

Dosya İşlemlerinde Temel Mantık ve open() Fonksiyonu

Python ortamında bir dosya üzerinde herhangi bir işlem yapabilmek için dosyanın işletim sisteminden talep edilmesi gerekir. Bu adım open() fonksiyonu ile gerçekleştirilir. Fonksiyon temelde dosyanın yolunu ve hangi amaçla açılacağını belirten kipi (modu) parametre olarak alır.

Dosya açma kipleri şunlardır:

  • ‘r’: Salt okuma (read) modudur. Dosya mevcut değilse FileNotFoundError hatası üretir. Varsayılan kiptir.
  • ‘w’: Yazma (write) modudur. Dosya yoksa oluşturur; dosya zaten varsa içeriğini tamamen silerek üzerine yazar.
  • ‘a’: Ekleme (append) modudur. Dosya yoksa oluşturur; dosya mevcutsa yeni veriyi dosyanın sonuna ekler.
  • ‘x’: Özel oluşturma (exclusive creation) modudur. Dosya zaten varsa FileExistsError hatası verir, yoksa oluşturur.
  • ‘b’: İkili (binary) moddur. Resim, ses, PDF gibi metin dışı dosyaları işlerken diğer kiplerin yanına eklenir (‘rb’, ‘wb’ gibi).
  • ‘t’: Metin (text) modudur. Varsayılan moddur.

Dosya açılırken karakter kodlamasına dikkat edilmelidir. Türkçe karakterlerin (ş, ğ, ç, ı, ö, ü) bozulmaması için encoding="utf-8" parametresinin verilmesi tavsiye edilir.

Python Dosya Okuma Yöntemleri

Python dosya okuma sürecinde ihtiyaca göre farklı fonksiyonlar sunar. Dosyanın boyutu ve bellekte nasıl işleneceği, seçilecek yöntemi belirler.

read() Metodu ile Tüm Dosyayı Okuma

read() metodu dosyanın tamamını tek bir karakter dizisi (string) olarak belleğe yükler. Küçük boyutlu metin dosyalarında hızlı bir çözümdür.

dosya = open("ornek.txt", "r", encoding="utf-8")
icerik = dosya.read()
print(icerik)
dosya.close()

Bu kod bloğunda ornek.txt dosyası salt okunur olarak açılmış, tüm içeriği icerik değişkenine aktarılmış ve son olarak close() metodu ile dosya bağlantısı kapatılmıştır.

readline() ve readlines() Metotları

Dosyayı satır satır işlemek veya satırları liste biçiminde almak için bu metotlar tercih edilir.

dosya = open("ornek.txt", "r", encoding="utf-8")
ilk_satir = dosya.readline()
print("Birinci Satir:", ilk_satir)

dosya.seek(0)
tum_satirlar = dosya.readlines()
print("Satir Listesi:", tum_satirlar)
dosya.close()

Burada readline() yalnızca ilk satırı döner. seek(0) komutu, dosya imlecini tekrar dosyanın en başına taşır. Ardından gelen readlines() metodu ise dosyadaki her bir satırı bir liste elemanı olarak döndürür.

Döngü Kullanarak Satır Satır Okuma

Büyük boyutlu log veya veri dosyalarında tüm içeriği tek seferde belleğe almak bellek yetersizliği hatalarına yol açabilir. Python dosya nesneleri yinelenebilir (iterable) olduğu için doğrudan for döngüsüne aktarılabilir:

dosya = open("buyuk_veri.txt", "r", encoding="utf-8")
for satir in dosya:
    print(satir.strip())
dosya.close()

Bu yaklaşım, dosyayı satır satır akış halinde okur; belleğe yalnızca o an işlenen satır yüklenir. strip() fonksiyonu ise satır sonlarındaki görünmeyen boşluk ve yeni satır karakterlerini (n) temizler.

Dosyaya Veri Yazma İşlemleri

Dosyaya veri kaydetmek için write() veya writelines() metotları kullanılır. Açılış modunun ‘w’ ya da ‘a’ olması, mevcut verinin korunup korunmayacağını belirler.

dosya = open("gunluk.txt", "w", encoding="utf-8")
dosya.write("Sistem baslatildi.n")
dosya.write("Ilk gorev tamamlandi.n")
dosya.close()

Yukarıdaki kod, gunluk.txt adında bir dosya oluşturur ve içine iki satır yazar. Dosya daha önce varsa önceki veriler silinir. Var olan verileri koruyarak devamına ekleme yapmak istendiğinde mod ‘a’ olarak seçilmelidir:

dosya = open("gunluk.txt", "a", encoding="utf-8")
dosya.write("Yeni log kaydi eklendi.n")
dosya.close()

Eğer bir metin listesi doğrudan yazdırılmak isteniyorsa writelines() kullanılabilir:

satirlar = ["Kullanici: adminn", "Durum: Aktifn", "Rol: Yoneticin"]
dosya = open("kullanici.txt", "w", encoding="utf-8")
dosya.writelines(satirlar)
dosya.close()

Bu metot elemanların sonuna otomatik olarak yeni satır karakteri eklemez; listenin içindeki öğelerin n içermesi gerekir.

Güvenli Dosya Yönetimi: with Deyimi

Dosyalar açıldıktan sonra mutlaka close() fonksiyonu çağrılarak kapatılmalıdır. Aksi takdirde dosya işletim sisteminde kilitli kalabilir veya bellek sızıntıları yaşanabilir. Kod çalışırken bir hata meydana gelirse close() satırına hiç ulaşılamayabilir.

Bu tür riskleri ortadan kaldırmak için Python bağlam yöneticisi (Context Manager) mekanizmasını sağlayan with deyimini sunar. with bloğu tamamlandığında dosya otomatik olarak kapatılır.

with open("rapor.txt", "w", encoding="utf-8") as dosya:
    dosya.write("Rapor Ozeti:n")
    dosya.write("Islem basariyla tamamlandi.")

Blok sona erdiğinde dosya kapanır. İstisnai bir hata çıksa bile kapanma işlemi güvence altındadır. Modern Python yazımında with yapısı endüstri standardı olarak kabul edilir.

Hata Yönetimi ve Dosya Varlık Kontrolü

Dosya okuma işlemlerinde en sık karşılaşılan sorun dosyanın belirtilen yolda bulunamamasıdır. Bu durumu önlemek için try-except blokları ya da os modülü kullanılmalıdır:

import os

dosya_yolu = "kayitlar.txt"

if os.path.exists(dosya_yolu):
    with open(dosya_yolu, "r", encoding="utf-8") as dosya:
        print(dosya.read())
else:
    print("Hata: Belirtilen dosya dizinde bulunamadi.")

Alternatif olarak try-except yaklaşımı ile işletim sistemi düzeyindeki istisnalar yakalanabilir:

try:
    with open("olmayan_dosya.txt", "r", encoding="utf-8") as dosya:
        icerik = dosya.read()
except FileNotFoundError:
    print("Dosya bulunamadi, lutfen dosya yolunu kontrol edin.")
except PermissionError:
    print("Bu dosyayi okumak icin yetkiniz bulunmuyor.")

Özet ve Sonraki Adımlar

Python’da dosya işlemleri temel olarak dosyanın doğru modda açılması, gerekli okuma veya yazma işlemlerinin yürütülmesi ve dosya kaynağının güvenli biçimde serbest bırakılması adımlarından oluşur. Bellek tüketimini minimumda tutmak için büyük dosyalarda döngülerden faydalanmak ve kaynak yönetimi için with yapısını tercih etmek en sağlıklı yaklaşımdır.

Sonraki aşamada yapılandırılmış veriler içeren CSV ve JSON dosyalarını işlemek için Python’ın yerleşik csv ve json modüllerini inceleyebilir, ardından veritabanı veya nesne serileştirme (pickle) konularına geçiş yapabilirsiniz.

#dosya islemleri#programlama#python#python dosya okuma#yazılım

コメント

まだコメントはありません。最初のコメントをどうぞ。

コメントを書く

コメントは管理者の承認後に公開されます。