📜Dosya İşlemleri
Python dosya işlemleri ile okuma, yazma, güncelleme ve silme işlemlerini göreceğiz.
Last updated
Python dosya işlemleri ile okuma, yazma, güncelleme ve silme işlemlerini göreceğiz.
Last updated
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.
Dosyalar üzerinde okuma, yazma, güncelleme ve silme işlemi yapmadan önce dosyalarımızı hangi modlarda (kiplerde) kullanabileceğimizi görelim.
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.
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.
Artık okuyacağımız dosyayı seçmiş bulunuyoruz. Bundan sonra işlemlerimize daha rahat devam edebiliriz.
read()
Dosyayı seçtikten sonra direkt ekrana basmak isteyebiliriz. Bunun için şu şekilde bir kullanımı tercih edebiliriz:
Eğer biz read()
fonksiyonuna bir sayı değeri verirsek sadece o sayı değeri kadar alanı okuyacaktır. Hemen görelim.
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.
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.
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.
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
Yöntem-2
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 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.
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.
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.
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)
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.
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.
Dosyalarınızı silmek istediğinizde os
modülünü programınıza dahil etmeniz gerekiyor. Ardından remove()
fonksiyonu sile dosyanızı silebilirsiniz.
Eğer silmek istediğiniz nesne bir klasörse bu sefer rmdir()
fonksiyonunu kullanmalısınız.
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.
Ç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.
Ü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.
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.
Ö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.
Eğer imlecimizi dosyada istediğimiz bir byte'a koymak istiyorsak bunu şu şekilde yapabiliriz.
Bu işlem için dosyayı a
kipinde açıp write ile verilerinizi eklemeniz yeterli olacaktır
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:
İşte bu kadar basit. Sadece farklı olarak dosyayı r+
modunda açtık çünkü dosyayı hem okuyor, hem yazıyoruz.
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