Site Loader

Merhaba arkadaşlar, bu yazımızda Python Dosya İşlemleri ni ele alacağız. Dosyalar konusu programlamada çok fazla kullanılan bir yapıdır bu yüzden detaylı ve anlaşılabilir bir şekilde anlatmaya çalışacağım.

Dosya Oluşturmak

Pythonda bir dosyayı açmak veya oluşturmak için open() fonksiyonu kullanılır. Yapısı şu şekildedir;

open(“dosyaAdi.txt”,”DosyayaErişmeKipi”)

Dosya adı olarak istediğimiz herhangi bir ismi girebiliriz. Dosyaya erişme kipi ise dosya üzerinde yapmak istediğimiz işlemleri belirtir.

Dosya Kapatmak

Yazılan kodların sisteme işlenmesi ve kaynakların boş yere kullanılmaması için açtığımız dosyaları kapatmamız gerekir. Bunu da close()

fonksiyonuyla yaparız.

Python Dosya Uzantısı

Dosyayı oluşturduğumuzda bellekte nereye kaydolduğunu bulmakta zorlanabiliriz. Bu yüzden Python bize ayrı bir kütüphane ve fonksiyon sunar. os kütüphanesi ve getcwd() fonksiyonu.

import os
print(os.getcwd())

Böylece oluşturduğumuz dosyanın adresini öğrenmiş oluruz;

ÇIKTI:

C:\Users\ozlem\PycharmProjects\dosyaislemleri

 

“w” dosya kipi

Dosyalarımızı açmak ve dosyalarımıza veri yazmak için “write” anlamına gelen “w” kipini kullanıyoruz.

“w” kipi;

  1. Eğer oluşturmak istediğimiz dizinde öyle bir dosya yoksa dosyayı oluşturur.
  2. Eğer öyle bir dosya varsa dosyayı silip tekrar oluşturur. Yani, eğer açmak istediğimiz dosyadan zaten varsa ve dosyanın içi doluysa “w” kipi dosyadaki bilgileri silip tekrar oluşturacaktır.  Bu yönüyle biraz tehlikeli olabilir.
dosya=open("pythonEarth.txt","w") #Dosyayı oluşturduk.
dosya.write("Merhaba Arkadaşlar") #Dosyanın içine veri girişi yaptık.
dosya.close()  # Dosyayı kapattık.

Dosya İşlemleri

Gördüğünüz gibi pythonEarth dosyamız oluştu ve içerisine veri girişi yapıldı.

Otomatik Dosya Kapatma

close() fonksiyonu dışında daha pratik bir dosya kapatma yöntemi daha vardır. Az önceki örnek üzerinden gösterecek olursak;

with open("pythonEarth.txt","w") as dosya:
dosya.write("Merhaba Arkadaşlar")

bu şekilde de açılan dosyayı pratik bir şekilde kapatabiliriz.

“a” kipi

Append (ekleme) kelimesinin kısaltılışı olan “a” kipi ;

  1. Eğer yoksa yeni bir dosya açar.
  2. Böyle bir dosya zaten varsa yeniden oluşturulmaz ve dosyaya ekleme yapmamızı sağlar. Burada eklediğimiz her şey otomatikman dosyanın sonuna ilave edilir.
dosya=open("pythonEarth.txt","a") # az önce açtığımız dosyaya gittik.
dosya.write("\nNasılsınız?")      # bir alt satıra geçmek için \n karakterini kullandık ve write()fonks. ile eklemek istediğimiz veriyi yazdık.
dosya.close()                     # dosyayı kapattık.

 

Dosya İşlemleri

Gördüğünüz gibi dosyanın sonuna ve bir alt satıra ekleme yaptık.

writelines() metodu

Python Dosya işlemlerinde write() fonksiyonuyla karakter dizileri yazabiliriz fakat liste dizileri yazamayız. Bu yüzden writeline() metodunu kullanırız. Örneğin yeni bir dosya açıp içine write() fonksiyonuyla liste yazdığımızda ;

dosya=open("meyveler.txt","w")
dosya.write(["elma\n","armut\n","çilek\n","şeftali\n","kayısı\n","üzüm\n","karpuz\n"])
dosya.close()

Şu hatayı alırız;

File “C:/Users/ozlem/PycharmProjects/dosyaislemleri/dosya.py”, line 2, in <module>
dosya.write([“elma\n”,”armut\n”,”çilek\n”,”şeftali\n”,”kayısı\n”,”üzüm\n”,”karpuz\n”])
TypeError: write() argument must be str, not list

 

Aynı kodu writelines() metoduyla yazdığımızda hatasız çalışıyor.

dosya=open("meyveler.txt","w")
dosya.writelines(["elma\n","armut\n","çilek\n","şeftali\n","kayısı\n","üzüm\n","karpuz\n"]) 
dosya.close()

Dosya Okuma

Python Dosya İşlemleri dosya okuma başlığı adı altında 3 adet fonksiyon öğreneceğiz. Bir dosyayı okumamızı sağlayan 3 farklı fonksiyon vardır. Bunlar; read() , readline(), readlines() fonksiyonlarıdır. Peki hepsi de dosyayı okumayı sağlıyorsa neden üç tane kullanıyoruz? Başlangıçta hepsi aynı görevi görse de bizlere farklı çıktılar verirler. O yüzden farklı amaçlar için farklı metot kullanmamız gereken durumlarla karşılaşabiliriz.

read() fonksiyonu

Bellekte var olan dosyayı okumamızı sağlar. Dosya yoksa yeni bir dosya oluşturmaz ve hata verir. read() fonksiyonunun çalışması için dosyanın önceden oluşturulması gerekir. Kullanımı şu şekildedir;

dosya=open("pythonEarth.txt","r")
print(dosya.read())
dosya.close() 

Çıktı:
Merhaba Arkadaşlar
Nasılsınız?

Peki önce dosyanın var olup olmadığına baksak, dosya varsa okutsak nasıl olurdu?

isfile() metodu

Burada isfile() metodundan yardım alırız;

import os
if os.path.isfile("meyveler.txt"):
    with open("meyveler.txt", "r") as dosya:
        print(dosya.read())

else:
    print(" Böyle bir dosya bulunamadı")

ÇIKTI:

elma
armut
çilek
şeftali
kayısı
üzüm
karpuz

Ayrıca sadece okuma işlemi yapacaksak bunu kodda belirtmemize gerek yok çünkü python default olarak direkt okuma modunda açar. Yukarıdaki kodu 3.satırdaki “r” kipi olmadan da yazdığımızda aynı çıktıyı alırız.

import os
if os.path.isfile("meyveler.txt"):
    with open("meyveler.txt") as dosya:
        print(dosya.read())

else:
    print(" Böyle bir dosya bulunamadı")

 

readline() fonksiyonu

Bu fonksiyon her çağrıldığında dosyanın sadece bir satırını okur.

dosya=open("meyveler.txt", "r")
print(dosya.readline())
print(dosya.readline())
print(dosya.readline())
dosya.close()

fonksiyonu üç kere çağırdığımız için bize ilk üç satırı yazdırır.

ÇIKTI:

elma
armut
çilek

“r+” kipi

r kipi sadece dosyayı okumamızı sağlıyordu. r+ kipi ise hem okumayı hem de dosyaya yazı yazmamızı sağlar.

readlines() fonksiyonu

Dosyanın içindeki tüm verileri bize liste halinde veren fonksiyondur. Bütün verileri bir listeye atar ve her satırı listenin elemanıymış gibi okur.

dosya=open("meyveler.txt", "r")
print(dosya.readlines())
dosya.close() 

ÇIKTI:

['elma\n', 'armut\n', 'çilek\n', 'şeftali\n', 'kayısı\n', 'üzüm\n', 'karpuz\n']

Dosyaları İleri Geri Sarmak

Dosyaları okurken en baştan başlıyorduk. Ancak normalde dosyaların uzunluğu bizim örneklerimizdeki kadar kısa olmayabilir ve baştan okumakta zaman kaybına neden olur. Bu yüzden dosyaları okumaya belirli bir yerden başlamak mümkün.  Öncelikle imlecimizin kaçıncı baytda (byte) olduğunu öğreniriz. Bu doğru bir sonuç için gereklidir.

tell() fonksiyonu

İmlecin o an  kaçıncı byteda  olduğunu gösteren fonksiyondur.

dosya=open("meyveler.txt")
print(dosya.tell())
dosya.close() 
ÇIKTI:
0

Şu an dosyayı yeni açtığımız için 0 konumundayız.

Peki bu imleci istediğimiz bayta götürmek için ne yapmalıyız?

seek() fonksiyonu

Okuma işlemini istediğimiz baytdan başlatan fonksiyondur.

dosya=open("meyveler.txt")
dosya.seek(15)
print(dosya.read())
dosya.close() 

ÇIKTI:

lek
şeftali
kayısı
üzüm
karpuz

Okuma işlemine 15. baytdan başladık. Hatırlarsanız dosyamızı elma\n armut\n çilek\n … şeklinde yazmıştık. \n de byta dahil olduğu için dosyamız -lek’ten itibaren okundu.

Dosyalarda Değişiklik Yapmak

seek() and write()

Bu iki fonksiyonu aynı anda kullansak yani seek() ile dosyanın belli bir yerine kadar gidip write() ile geldiğimiz yere ekleme yapsak nasıl olurdu?

Yazdığımız veriler dosyada önceden bulunan değerlerin üzerine yazılacaktır. Bunun için de yukarıda gördüğümüz hem yazma hem de okuma işlevi gören r+ kipini kullanırız.

dosya=open("meyveler.txt","r+")
dosya.seek(6)
dosya.write("brokoli")
dosya.close()

Dosya İşlemi

Görüldüğü üzere 6.baytdan itibaren veri girişi yaptık.

Dosyanın Sonunda Değişiklik Yapmak

Yukarıda gördüğümüz “a” kipi (append) ve write() fonksiyonu ile dosyanın sonunda istediğimiz değişikliği yapabiliriz.

dosya=open("meyveler.txt","a")
dosya.write("patates")
dosya.close() 

ÇIKTI:

elma
brokoliçilek
şeftali
kayısı
üzüm
karpuz
patates

Dosyanın Başında Değişiklik Yapmak

Dosyamızın başına ekleme yapmak için öncelikle r+ kipini kullanarak en başa seek() fonksiyonu ile gidip  write() fonksiyonuyla da yazma işlemini yaparız. Örneğin;

dosya=open("meyveler.txt","r+")
dosya.seek(0)
dosya.write("muz")
dosya.close() 

ÇIKTI:

muza
brokoliçilek
şeftali 
kayısı 
üzüm 
karpuz 
patates

görüldüğü üzere baştaki elma kelimesinin ilk üç harfi yerine muz yazıldı.

Dosya Silmek

Dosya silme işlemi için en başta gördüğümüz os kütüphanesinden faydalanıyoruz. Ve ayriyeten remove() fonksiyonunu çağırıyoruz.

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

Bu şekilde dosyamız silinmiş olur.

Bir klasörü silmek içinse rmdir() fonksiyonunu kullanırız;

import os
os.rmdir("dosyaislemleri")

Dosya Metotları

-NAME

Dosyanın isim bilgisini veren metot.

with open("meyveler.txt") as dosya:
        print(dosya.read())
 
print("Dosya İsmi: ",dosya.name)
 
ÇIKTI:: 
Dosya ismi: meyveler.txt

-MODE

Dosyanın hangi modda olduğunu veren metot.

Şimdi de normal şekilde yazalım;

Dosyanın yazma modunda olup olmadığını kontrol eder. True-False değerini döndürür.

dosya = open("meyveler.txt","r")
dosya.readline()
 
print(dosya.writable())
 
ÇIKTI::
False

-READABLE METODU

Dosyanın okuma modunda olup olmadığını kontrol eder. True-False değerini döndürür.

dosya = open("meyveler.txt","r")
dosya.readline()
 
print(dosya.readable())
 
ÇIKTI::
True

-TRUNCATE() METODU

İngilizcede truncate kelimesi ‘budamak, kırpmak’ gibi anlamlara gelir. Truncate() metodu dosyayı istediğimiz boyuta getirmemize yarar. Yani bir nevi dosyayı kırpar.

with open("meyveler.txt","r+") as dosya:
    dosya.truncate() #eğer burada parantez içine sayı girmezseniz dosyayı sıfırlar.

2.satırda parantez içerisine sayı girmediğimizde “w” kipiyle aynı etkiyi yaratır yani dosyanın içeriğini siler.

with open("meyveler.txt","r+") as dosya:
    dosya.truncate(2)

ÇIKTI::
mu

ilk iki bayt dışında dosyadaki bütün verileri sildi.

Dosyaya Erişme Kipleri

Python Dosya İşlemleri dersimizin kipleri ve amaçları aşağıda yer almaktadır.

"r"

Bu ön tanımlı kiptir. Bu kip dosyayı okuma yetkisiyle açar. Ancak bu kipi kullanabilmemiz için, ilgili dosyanın disk üzerinde halihazırda var olması gerekir. Eğer bu kipte açılmak istenen dosya mevcut değilse Python bize bir hata mesajı gösterecektir. Dediğimiz gibi, bu ön tanımlı kiptir. Dolayısıyla dosyayı açarken herhangi bir kip belirtmezsek Python dosyayı bu kipte açmak istediğimizi varsayacaktır.

"w"

Bu kip dosyayı yazma yetkisiyle açar. Eğer belirttiğiniz adda bir dosya zaten disk üzerinde varsa, Python hiçbir şey sormadan dosya içeriğini silecektir. Eğer belirttiğiniz adda bir dosya diskte yoksa, Python o adda bir dosyayı otomatik olarak oluşturur.

"a"

Bu kip dosyayı yazma yetkisiyle açar. Eğer dosya zaten disk üzerinde mevcutsa içeriğinde herhangi bir değişiklik yapılmaz. Bu kipte açtığınız bir dosyaya eklediğiniz veriler var olan verilere ilave edilir. Eğer belirttiğiniz adda bir dosya yoksa Python otomatik olarak o adda bir dosyayı sizin için oluşturacaktır.

"x"

Bu kip dosyayı yazma yetkisiyle açar. Eğer belirttiğiniz adda bir dosya zaten disk üzerinde varsa, Python var olan dosyayı silmek yerine size bir hata mesajı gösterir. Zaten bu kipin “w” kipinden farkı, var olan dosyaları silmemesidir. Eğer belirttiğiniz adda bir dosya diskte yoksa, bu kip yardımıyla o ada sahip bir dosya oluşturabilirsiniz.

"r+"

Bu kip, bir dosyayı hem yazma hem de okuma yetkisiyle açar. Bu kipi kullanabilmeniz için, belirttiğiniz dosyanın disk üzerinde mevcut olması gerekir.

"w+"

Bu kip bir dosyayı hem yazma hem de okuma yetkisiyle açar. Eğer dosya mevcutsa içerik silinir, eğer dosya mevcut değilse oluşturulur.

"a+"

Bu kip bir dosyayı hem yazma hem de okuma yetkisiyle açar. Eğer dosya zaten disk üzerinde mevcutsa içeriğinde herhangi bir değişiklik yapılmaz. Bu kipte açtığınız bir dosyaya eklediğiniz veriler var olan verilere ilave edilir. Eğer belirttiğiniz adda bir dosya yoksa Python otomatik olarak o adda bir dosyayı sizin için oluşturacaktır.

"x+"

Bu kip dosyayı hem okuma hem de yazma yetkisiyle açar. Eğer belirttiğiniz adda bir dosya zaten disk üzerinde varsa, Python var olan dosyayı silmek yerine size bir hata mesajı gösterir. Zaten bu kipin “w+” kipinden farkı, var olan dosyaları silmemesidir. Eğer belirttiğiniz adda bir dosya diskte yoksa, bu kip yardımıyla o ada sahip bir dosya oluşturup bu dosyayı hem okuma hem de yazma yetkisiyle açabilirsiniz.

 

Python Dosya İşlemleri yazımızın sonuna geldik. Umarım faydalı olmuştur. Eksik veya yanlış gördüğünüz yerleri ve sorularınızı yorumlarda belirtmeyi unutmayın. Hoşça kalın. 🙂

Python hakkındaki diğer yazılara buradan ulaşabilirsiniz.

 

0

Post Author: Özlem Boran

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir