📜Dosya İşlemleri

Python dosya işlemleri ile okuma, yazma, güncelleme ve silme işlemlerini göreceğiz.

Python ile dosya işlemleri önemli bir konudur. Fakat öncesinde dosya nedir sorusunu cevaplayalım.

Unix işletim sistemlerinde her nesne bir dosyadır. Yani elinizdeki metin belgeleri, medya dosyaları gibi herşey uzantısı olsun veya olmasın bir dosya demektir. Sizde bu dosyalar üzerinde özgürce çalışabilirsiniz.

Artık dosyalar üzerinde yapabileceğimiz tüm işlemleri sırasıyla görebiliriz.

1. Dosya İşlem Kipleri

Dosyalar üzerinde okuma, yazma, güncelleme ve silme işlemi yapmadan önce dosyalarımızı hangi modlarda (kiplerde) kullanabileceğimizi görelim.

MOD

AÇIKLAMA

r

Mevcut dosyayı okumak için açar, yoksa hata verir

w

Dosya yoksa oluşturur, varsa içeriği silerek sıfır dosya açar

a

Dosya yoksa oluşturur, varsa dosyanın sonunda imleçten başlayarak ekleme yapar

r+

Dosyayı hem okuma, hem yazma(w) modunda açar

2. Dosya Okuma & Açma İşlemleri

Bu örneklerde basit bir txt uzantılı metin belgesi ile çalışacağız fakat siz herhangi bir dosya ile de aşağıdaki örnekleri gerçekleştirebilirsiniz. Hatta png uzantılı resimlerle bile çalışabilirsiniz. Çünkü unutmayınız ki herşey bir dosyadır.

2.1 Dosyayı Seçme

Aşağıdaki yöntemle dosyamızı seçiyoruz ve işlem kipini (r-read) belirtiyoruz. Ayrıca karakter kodlamasını da fonksiyona dahil edebiliriz.

dosya = open("bilgiler.txt","r",encoding="utf-8")

Artık okuyacağımız dosyayı seçmiş bulunuyoruz. Bundan sonra işlemlerimize daha rahat devam edebiliriz.

2.2 Tüm Dosyayı Ekrana Yazdırma / read()

Dosyayı seçtikten sonra direkt ekrana basmak isteyebiliriz. Bunun için şu şekilde bir kullanımı tercih edebiliriz:

dosya = open("bilgiler.txt","r",encoding="utf-8")
oku = dosya.read()
print(oku)

Eğer biz read() fonksiyonuna bir sayı değeri verirsek sadece o sayı değeri kadar alanı okuyacaktır. Hemen görelim.

dosya = open("bilgiler.txt","r",encoding="utf-8")
oku = dosya.read(10)  #Sadece ilk 10 karakteri okur
print(oku)

Artık metin belgemizin tamamını ekranda görebiliriz ama unutmayınız ki bu fonksiyon çalıştığında imleci dosyanın sonuna götürür. Yani tekrar aynı fonksiyonu çağırırsanız bu sefer imleç en sonra olduğu için ekrana basılan bir içerik göremezsiniz.

2.3 Her Seferinde Sıradaki Satırı Ekrana Yazdırma / readline()

Şimdi sırada satır satır okuma işlemi yer alıyor. readline() fonksiyonunu her çağırmamızda sadece bir satır okursunuz. Yani ilk çağırdığınızda dosyanın ilk satırını, ikinci çağırdığınızda dosyanın ikinci satırını okursunuz. Bunu döngüye sokarak tüm dosyayı satır satır okuyabilirsiniz.

dosya = open("bilgiler.txt","r",encoding="utf-8")

print(dosya.readline()) #1.satırı yazdır
print(dosya.readline()) #2.satırı yazdır
print(dosya.readline()) #3.satırı yazdır

Buradaki tek sorun döngüye soktuğumuzda döngünün kaçıncı satırda biteceğini bilemememiz. Bunu öğrenmenin farklı farklı yöntemleri var ama bize zaman kaybettirmekten başka birşey sağlamaz. Bu yüzden aşağıdaki methodu kullanmanız daha mantıklı olacaktır.

2.4 Dosyayı Satır Satır Döngüyle Ekrana Yazdırma / with

Bir dosyayı satır satır yazdırabilmemiz için readline() dışında kullanabileceğimiz 2 yöntemimiz var. İki yöntemde aynı kapıya çıkıyor. Bu nedenle aşağıdaki kullanım şekillerinden hoşunuza gideni direkt kullanabilirsiniz.

Yöntem-1

dosya = open("a.txt","r")
for satir in dosya:
   print(satir)

Yöntem-2

with open("a.txt","r") as dosya:
   for satir in dosya:
        print(satir)

2.5 Dosyanın Her Satırını Diziye Eklemek / readlines()

readline() fonksiyonu her çağırdığımızda dosyayı satır satır okumamızı sağlıyordu. readlines() ise çağırdığımızda dosyanın tüm satırlarını bir diziye atar. Böylece her satır dizinin bir elemanı olur. Kullanım şeklini ve sonucunu aşağıda görebilirsiniz.

dosya = open("a.txt","r")
dizi = dosya.readlines()
print(dizi)

Dosya işlemlerinde okuduğunuz satırların sonunda /n kısmını görebilirsiniz. Bir alt satıra inmeyi işaret eden bu kodu rstrip("/n") fonksiyonuyla temizleyebilirsiniz.

3- Dosyaya Yazma İşlemleri

Dosyalarımızı artık rahatça okuyabiliyoruz. Peki bu dosyalara istediğimiz verileri nasıl ekleyebiliriz? Bu sorunun cevabı da birazdan göreceğiniz gibi oldukça basit. Sadece dikkat etmeniz gereken tek nokta var ve buda dosyayı hangi kipte yazma moduna alacağınızdan başka birşey değil.

Şimdiki konumuz dosyaya veri yazmak olduğu için biz sadece w ve a modlarını kullanacağız.

3.1 w Moduyla Dosyaya Veri Yazmak

w kipiyle açtığımız dosyalar yoksa oluşturulur. Varsa dosyanın içeriği önce silinerek temizlenir ve ardından yazmak istediğimiz veriler eklenir. Kısaca eski veriler yok olur. Bu nedenle w modunu dikkatli kullanınız.

dosya = open("bilgiler.txt","w",encoding="utf-8")

dosya.write("Kerteriz ile Python Dosya İşlemleri\n")
dosya.write("Burası 2. satır oluyor artık")
dosya.write("3.satıra inmeden 2.satırın sonundan itibaren yazıyor")

Yukarıdaki işlemlerden sonra dosyayı açarsanız karşınızda bu yazdıklarımızı göreceksiniz. Dosyayı kapatana kadar yazmaya da devam edebilirsiniz (dosya kapatma işlemini en sonra göreceğiz)

3.2 a Moduyla Dosyaya Veri Yazmak

a modu da yine aynı şekilde dosyaya veri yazmamızı sağlar ama tek farkı mevcut dosyanın içeriğini silmez. Bunun yerine dosyanın sonundan yeni verileri eklemeye başlar.

dosya = open("bilgiler.txt","a",encoding="utf-8")

dosya.write("Kerteriz ile Python Dosya İşlemleri\n")
dosya.write("Burası 2. satır oluyor artık")
dosya.write("3.satıra inmeden 2.satırın sonundan itibaren yazıyor")

Eğer bilgiler.txt nin içinde daha önceden yazılı başka metinler varsa silinmediğini göreceksiniz.

Dosyalara yazma işlemi yaparken satır eklemek isterseniz \n kullanmalısınız. Aksi halde tüm yazdıklarınız tek satırda yan yana dizilir.

4. Dosya Silmek

Dosyalarınızı silmek istediğinizde os modülünü programınıza dahil etmeniz gerekiyor. Ardından remove() fonksiyonu sile dosyanızı silebilirsiniz.

import os
os.remove("dosya.txt")

Eğer silmek istediğiniz nesne bir klasörse bu sefer rmdir() fonksiyonunu kullanmalısınız.

import os
os.rmdir("resimler")

5. Dosyaları Kapatmak

Dosyalar üzerindeki işiniz bittiğinde kapatmanız gerekiyor. Bunun için close() adından da anlaşılacağı üzere yardımımıza koşuyor.

dosya = open("bilgiler.txt","a",encoding="utf-8")
dosya.close()

Çoğu kez dosyalarımızı kapatmayı unuttuğumuz için Pythonun otomatik dosya kapatma özelliğini kullanmak daha iyidir. Bunun için dosyalarınızı açarken şu şekilde açarsanız manuel olarak dosya kapatmaya ihtiyacınız kalmayacaktır.

with open("bilgiler.txt","a",encoding="utf-8") as dosya:
    #kullanıcak fonksiyonlar
    #......
    #......

6. Özel Dosya Fonksiyonları

6.1 Dosyanın Var Olup Olmadığını Kontrol Etmek

Üzerinde çalışmak istediğiniz bir dosyanın öncelikle var olup olmadığını kontrol etmek hataların önüne geçebilir. Bu kontrolü os modülüyle şu şekilde yapabilirsiniz.

import os

if os.path.exists("bilgiler.txt"):
  print("Dosya var")
else:
  print("Dosya mevcut değil!")

6.2 İmlecin Nerede Olduğunu Öğrenme

Biraz sonra göreceğimiz imleci dosyada istediğimiz yere koyma işlemlerine gelmeden önce imlecin nerede olduğunu öğrenmekle başlayalım konuya. Aşağıdaki fonksiyon sayesinde imlecin dosyanın kaçıncı byte nda olduğunu öğrenebiliriz.

with open("bilgiler.txt","r",encoding = "utf-8") as dosya:
    print(dosya.tell())

Örneğin dosyada bir read() işlemi yaptıysanız imleç dosyanın sonuna gider ve yukarıdaki fonksiyon size dosyanın byte miktarını gösterir. Hiçbir işlem yapmadıysanız da dosyanın başında olduğunuzu söyler, yani 0 gösterir.

6.3 Dosyanın Belirli Bir Byte'ına İmleci Koymak

Eğer imlecimizi dosyada istediğimiz bir byte'a koymak istiyorsak bunu şu şekilde yapabiliriz.

with open("bilgiler.txt","r",encoding = "utf-8") as dosya:
    print(dosya.seek(20))  #20. byte'a imleci koyar

6.4 Dosyanın Sonuna Veri Eklemek

Bu işlem için dosyayı a kipinde açıp write ile verilerinizi eklemeniz yeterli olacaktır

6.5 Dosyanın Başına Veri Eklemek

Bu işlemi yapabilmenin en kolay yolu dosyanın tamamını okuyup başına istediğimiz veriyi ekleyerek yeni bir string olarak kaydetmek, ardından imleci başa getirerek yeni veriyi yazmak olacaktır. Hemen görelim:

with open("bilgiler.txt","r+",encoding = "utf-8") as dosya:
    icerik = dosya.read()
        yeniicerik = "Bu metini ilk satıra ekliyorum\n" + icerik
        dosya.seek(0)
        dosya.write(yeniicerik)

İşte bu kadar basit. Sadece farklı olarak dosyayı r+ modunda açtık çünkü dosyayı hem okuyor, hem yazıyoruz.

Last updated