python dersleri

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.

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 🙂

Tüm Python Dersleri

 

 

 

86

Cahit İşleyen

Data Scientist at @Embedica.ai
Python ve Linux sever.
Çay tiryakisi

8 Yorum

  • hocam .rmdir fonksiyonundan bahsettiğiniz kısımda örnek verirken .remove kullanılmış, düzeltebilirseniz.

  • 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

Haftalık Bülten

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