Python Dosya İşlemleri

Merhaba Arkadaşlar,

Mobilhenem.com da Python Dersleri serisinin bir dersinde yine birlikteyiz. Bu derste Python ile Dosya İşlemlerini göreceğiz.  Peki neler yapacağız? Python ile dosya açma, dosya okuma, var olan bir dosyayı silmeyi ve dosyalar üzerinde çeşitli işlemler yapmayı öğreneceğiz. Son olarak güzel bir uygulama ile dersi bitireceğiz. Hadi başlayalım o zaman 🙂

Python Dosya Uzantısı

Öncelikle dosya işlemleri yaparken sürekli yaşadığımız  bir sıkıntı var. Biz dosyayı okumaya çalıştığımızda yada dosyayı kaydettiğimizde dosyayı nereye kaydettiğimizi ve dosyayı açmaya çalışırken dosyaya ulaşılamadı dosya yok gibi hatalar alıyoruz. Onun için biz ilk önce dosya ile ilgili işlemleri vs. yaptığımız dizini öğrenelim. Onun için Python bize bir kütüphane sunuyor. Bu kütüphanemiz os kütüphanesidir. Hemen kütüphaneyi ekleyelim ve dosya uzantısını öğrenelim bunun için getcwd() fonksiyonunu kullanıyoruz.

Çıktı :

Dosyanın oluşturulacağı dizini öğrenmiş olduk. İkinci olarak öğrenmemiz gereken bir şey daha var dosya üzerinde yapacağımız işleme göre bazı modlar var bu modlar ile dosya üzerinde yapacağımız işlemleri belirtmemiz gerekiyor. Bu modlar;

rSadece okumak için bir dosya açar. Dosya işaretçisi, dosyanın başına yerleştirilir. Bu, varsayılan moddur.
r+Hem okuma hem de yazma için bir dosya açar. Dosya işaretçisi, dosyanın başına yerleştirilir.
wSadece yazmak için bir dosya açar. Dosya varsa, dosyanın üzerine yazar. Dosya yoksa yazmak için yeni bir dosya oluşturur.
w+Yazma ve okuma için bir dosya açar. Dosya varsa var olan dosyanın üzerine yazar. Dosya yoksa okuma ve yazma için yeni bir dosya oluşturur.
aEklemek için bir dosya açar. Dosya işaretçisi dosya varsa, dosyanın sonundadır. Yani, dosya ekleme modunda dır. Dosya yoksa yazmak için yeni bir dosya oluşturur.
a+Hem eklemek hem de okumak için bir dosya açar. Dosya işaretçisi dosya varsa, dosyanın sonundadır. Dosya ekleme modunda açılır. Dosya yoksa, okuma ve yazma için yeni bir dosya oluşturur.

 

Temel dosya modlarını öğrendik diğer modlara da buradan ulaşabilirsiniz.

Dosya modlarını öğrendiğimize göre hemen ilk dosyamızı açalım. Dosya açmamızı sağlayan fonksiyon open() fonksiyonudur ve iki parametreden oluşur. Birinci parametre dosyanın ismi ikinci parametre ise dosyanın modunu yani bu dosya üzerinde sen ne yapacaksın sadece okuyacak mısın, dosyaya bir şey mi yazacaksın veya dosyaya yeni bir şey mi ekleyeceksin bu modları yukarda verdim zaten.

Genel taslak;

Open(“dosyaAdi.txt,”mod”)

Dosyaya Yazma

Az önce genel bilgileri verdik şimdi dosyamızı açalım ve bir şeyler ekleyelim.

write()

Dosyaya yazı yazmamızı sağlayan fonksiyon hemen gösterelim.

Şimdi C:\Users\Cahit\PycharmProjects\proje1 dizinine giderek dosyamızın oluşup oluşmadığını kontrol edelim  ve dosyamızı okuyalım.

close()

Gördüğünüz gibi “deneme.text” dosyamız oluşturduk ve içine bir metin ekledik. Bu arada dikkat etmemiz gereken bir şey var  en sonda close() dosyamızı kapattık ve bunu her seferinde yapmamız gerekiyor.

Otomatik Dosya Kapatma

Şimdi siz diyeceksiniz ki ben her seferinde bununla uğraşmak zorunda mıyım sürekli, bunun başka bir yolu yok mu?  Tabi ki var Python bunun için de bir çözüm bulmuş. Hemen az önceki  uygulamayla göstereyim.

Bu yöntemi kullanmanızı tavsiye ederim.

Şimdi size çok önemli bir bilgi vermek istiyorum. Python dosyaya yazılan her şeyi karakter dizisi olarak kaydediyor. Biz şimdi karakter dizisi dışında bir veri türünü kaydetmeye çalışalım mesela bil listeyi bakalım ne oluyor.

writelines()

Gördüğünüz gibi Python yorumlayıcısı bize write() fonksiyonu ile  ancak karakter dizini kaydede bildiğimizi listeleri kaydedemediğimizi söylüyor. Bunun için başka fonksiyon kullanacağız bu fonksiyon writelines() fonksiyonudur. Hemen kullanalım.

 

Eğer kodu çalıştırdığınızda herhangi bir hata oluşmadığını ve dosyaya bilgilerin başarılı bir şekilde kaydetmiş olduk. Burada ayrıca dikkat etmemiz gereken bir şey daha var .txt dosyalarına bütün veriler aynı satıra yazılır alt satıra yazması için  \n işlecini kullanıyoruz. Kodu her çalıştırdığımızda Python her seferinde o dosyanın üzerine yazar ve eski bilgiler silinir. Eğer siz bilgilerin silinmesini istemiyorsanız yeni bilgileri eklemek istiyorsanız dosyayı  “a” modun da açmalısınız.

Dosya Okuma

Az önce dosyaya yazma işlemini yaptık şimdi yazdığımız dosyayı okuyalım bunun için read() fonksiyonunu kullanıyoruz. Hemen yapalım;

Burada dikkat etmemiz gereken bir şey var biz dosyayı “w” modunda açtığımızda dosya yoksa yeni dosya oluşturuluyordu. Ama “r” modunda açmaya çalıştığımızda. Şu şekilde bir hata verecektir.

FileNotFoundError: [Errno 2] No such file or directory: ‘deneme.txt’

isfile()

Yani dosya bulunamadı hatası. Bunun için dosyayı açmadan önce dosyamızın olup olmadığını kontrol etmeliyiz. Hemen şöyle yapalım eğer dosya varsa dosyayı okuyalım eğer dosya yoksa dosya bulunamadı şeklinde bir çıktı versin.

Bu şekilde dosyanın olup olamadığını isfile() fonksiyonu ile kontrol ettik. Ayrıca sadece okuma işlemi yapacaksanız. Dosyayı hangi modda açacağınızı belirtmemize gerek yok. Çünkü Python default olarak okuma modun da açar hemen gösterelim.

Aynı şekilde  çıktıyı alız.

Görüldüğü gibi bu şekilde de dosyaları okuyabiliyoruz.

readlines()

Şimdi iyi güzel ben dosyaları okuyabiliyorum. Peki dosya üzerinde bir değişiklik yapabilir miyim diyeceksiniz. Okuduğunuz dosya üzerinde okuma işlemi yapamazsınız sebebi ise şu az önce de bahsettiğimiz gibi .txt dosyalarını karakter dizileri olarak kaydediyor. Bu bir engel mi diyeceksiniz onun için. Biraz geri saralım ve karakter dizileri dersine gidelim orada biz karakter dizilerini anlatırken karakter dizilerinin immutable yani değiştirilemez bir veri tipi olduğunu söylemiştik dimi. O zaman ne yapmalıyız diye sorarsanız bunun cevabı çok basit. Bunun için readlines() fonksiyonunu kullanacağız peki bu fonksiyon ne işe yarıyor? Bu fonksiyon dosyayı okurken dosyayı bir listeye atar. Ayrıca dosyanın her bir satırını listenin bir elemanıymış gibi okur. Hemen kullanalım elimizde şu şekilde bir dosya olsun.

Şu şekilde bir çıktı alırız:

Bu şekilde bu sorunu da halletmiş olduk.

readline()

Peki dosyada okuma işlemini sadece bir kısmını okumak istiyorsak ne yapacağız bunun içinde readline() fonksiyonunu kullanabiliriz. Bu fonksiyon ile sadece bir satırı okuyabiliriz.

seek()

Görüldüğü gibi tek bir satırı okudu peki biz istediğimiz yerden okuma işlemi yapabilir miyiz tabi ki yapabiliriz. Bunun için bir fonksiyon kullanacağız bu fonksiyon seek() fonksiyonudur. Peki fonksiyon ne işe yarar? Python dosyaları okurken okuduğu yere kadar imleci taşır. Bu yüzden bizde imleci istediğimiz yere alıp o kısımdan itibaren okuma işlemini yapabiliriz. Hemen yapalım imleci 10.  karaktere taşıyalım o kısımdan sonra okuma işlemi yapalım.

Şeklinde bir çıktı aldık.

Şeklinde bir çıktı aldık çünkü python 10. Karakterden sonra okuma işlemini yaptı. Bu yüzden ilk 9 karakteri okumadı. Eğer imlecin hangi konumda olduğunu öğrenmek istiyorsanız o zaman tell() fonksiyonunu kullanabilirsiniz.

Aynı şekilde biz bu fonksiyonla imleci dosyanın en başına, en sonuna veya ortasında götürerek istediğimiz değişikliği yapabiliriz.

Dosya silme

Dosya silme işlemini yapabilmek için daha önce kullandığımız bir kütüphane olan os kütüphanesi kullanacağız bunun için remove() fonksiyonunu kullanıyoruz.

Bu şekilde bir dosyayı silmiş olacağız eğer bir klasörü silmek istersek o zaman rmdir() fonksiyonunu kullanacağız.

Bu şekilde bütün bir klasörü silmiş olacağız.

Dosyanın Metotları

Name

Dosyanın isim bilgisini veren metot.

Mode

Dosyanın hangi modda olduğunu veren metot.

Closed

Dosyanın kapalı olup olmadığını kontrol eder.

Dosya otomatik açma kapatma yaptığımız için True değerini verdi. Şimdi biz dosyayı normal şekilde açalım bakalım nasıl bir çıtı alıyoruz.

Writable

Dosyanın yazma modunda açılma modunda olup olmadığını kontrol eder True/False değer döndürür.

Readable

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

Dosyalar ile ilgili örnek için buraya bakabilirsiniz.

Mobilhanem.com da Python da Dosya İşlemleri  Dersinin sonuna geldik bir sonraki derste Python Fonksiyonlar konusu ele alacağım eksik yada yanlış gördüğünüz bir yer için çekinmeden iletişime geçebilirsiniz bir sonraki yazıda görüşmek üzere 🙂

Tüm Python Dersleri

 

 

 

Cahit İşleyen

Fırat Üniversitesi Yazılım Mühendisliği
Python ve Linux sever.
Çay tiryakisi

Yorum Yaz

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?