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.
import os print(os.getcwd())
Çıktı :
C:\Users\Cahit\PycharmProjects\proje1
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;
r | Sadece 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. |
w | Sadece 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. |
a | Eklemek 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.
dosya = open("deneme.txt","w") dosya.write("Merhaba Millet :)") dosya.close()
Ş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.
with open("deneme.txt","w") as dosya: dosya.write("Merhaba Millet :)")
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.
with open("deneme.txt","w") as dosya: dosya.write(["Merhaba Millet\n","Python Dersleri Hoşgeldiniz"]) File "C:/Users/Cahit/PycharmProjects/proje1/file.py", line 2, in <module> dosya.write(["Merhaba Millet\n","Python Dersleri Hoşgeldiniz"]) TypeError: write() argument must be str, not list
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.
with open("deneme.txt","w") as dosya: dosya.writelines(["Merhaba Millet\n","Python Dersleri Hoşgeldiniz"])
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;
with open("deneme.txt","r") as dosya: print(dosya.read()) Merhaba Millet Python Dersleri Hoşgeldiniz
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.
import os if os.path.isfile("deneme.txt"): with open("deneme.txt","r") as dosya: print(dosya.read()) else: print("dosya bulunamadı")
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.
import os if os.path.isfile("deneme.txt"): with open("deneme.txt") as dosya: print(dosya.read()) else: print("dosya bulunamadı")
Aynı şekilde çıktıyı alız.
Python Java Ruby Kotlin Android
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.
import os if os.path.isfile("deneme.txt"): with open("deneme.txt", "r") as dosya: print(dosya.readlines()) else: print("dosya bulunamadı")
Şu şekilde bir çıktı alırız:
['Python\n', 'Java\n', 'Ruby\n', 'Kotlin\n', 'Android']
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.
import os if os.path.isfile("deneme.txt"): with open("deneme.txt", "r") as dosya: print(dosya.readline()) else: print("dosya bulunamadı") Python
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.
import os if os.path.isfile("deneme.txt"): with open("deneme.txt") as dosya: dosya.seek(10) print(dosya.read()) else: print("dosya bulunamadı")
Şeklinde bir çıktı aldık.
va Ruby Kotlin Android
Ş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.
import os os.remove("deneme.txt")
Bu şekilde bir dosyayı silmiş olacağız eğer bir klasörü silmek istersek o zaman rmdir() fonksiyonunu kullanacağız.
import os os.rmdir(“proje1”)
Bu şekilde bütün bir klasörü silmiş olacağız.
Dosyanın Metotları
Name
Dosyanın isim bilgisini veren metot.
with open("deneme.txt") as dosya: print(dosya.read()) print("Dosya İsmi: ",dosya.name) Dosya ismi: deneme.txt
Mode
Dosyanın hangi modda olduğunu veren metot.
with open("deneme.txt","r") as dosya: dosya.readline() print("Dosya Modu: ",dosya.mode) Dosya Modu: r
Closed
Dosyanın kapalı olup olmadığını kontrol eder.
with open("deneme.txt","r") as dosya: dosya.readline() print("Dosya Kapalımı: ",dosya.closed) Dosya Kapalımı: True
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.
dosya = open("deneme.txt","r") dosya.readline() print("Dosya Kapalımı: ",dosya.closed) Dosya Kapalımı: False
Writable
Dosyanın yazma modunda açılma modunda olup olmadığını kontrol eder True/False değer döndürür.
dosya = open("deneme.txt","r") dosya.readline() print(dosya.writable()) False
Readable
Dosyanın okuma modunda olup olmadığını kontrol eder True/False değer döndürür.
dosya = open("deneme.txt","r") dosya.readline() print(dosya.readable()) True
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 🙂
86
hocam .rmdir fonksiyonundan bahsettiğiniz kısımda örnek verirken .remove kullanılmış, düzeltebilirseniz.
Teşekkürler düzeltildi.
Hocam sizce kodları yazarken PyCharm kullanmalı mıyım?
Sizin tercihiniz tabi ben ilk başladığım da Pycharm kullanıyordum gerçi hala kullanıyorum yani tavsiye ederim 🙂
Hocam sadece .txt dosyalarında ve klasörlere mi işlem yapabiliyoruz?
hocam poweshell kullanıyorum yeni başladım python öğrenmeye.Klasör içinde metin ya da parametre oluşturmadan dosya oluşturmaya calışıyorum fakat olmuyor.
echo &null(bu kısım renksiz oluyor) >> first_app.py
böyle yapınca olmuyor yardımcı olur musunuz?
Hocam dosya oluşturmak istiyorum fakat kodları doğru yazdığım halde Python hata veriyor neden olabilir ?
Merhaba
Wher open okumayı localhost da okur iken
Sunucuda okumuyor.
Sunucuda flask web site yaptım stabil çalışıyor ama dosya okuma yapılamıyor sorun şu ki hatada vermiyor neden olabilir acaba chmod 777 olarak ayarlı dosya