
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;
- Eğer oluşturmak istediğimiz dizinde öyle bir dosya yoksa dosyayı oluşturur.
- 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.
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 ;
- Eğer yoksa yeni bir dosya açar.
- 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.
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()
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.