Python ile Dosya İşlemleri

Önceki yazılarda yazdığımız Python kodları, program sonlandığı andan itibaren kaybolur. Program yeniden başlatıldığında daha önceden yazdığımız kodlar eğer kaydedilmemiş ise erişilemezdir. Bilgisayarların temel görevi ve bizlerin istediği verilerimizin depolanmasıdır. Bir veriyi kalıcı olarak depolayabilmek için ya sabit disklerde ya da kalıcı belleklerde saklanması gerekir. Verilerimizi disk üzerlerinde saklamanın en iyi yolu, verileri dosya olarak kaydetmektir.

Dosya Oluşturma

Bu bölümde sizlere Python ile dosyaları nasıl oluşturabileceğimizden ve düzenleyebileceğimizden bahsedeceğim. Bunun için bilgisayarımızda bir metin dosyası oluşturabilir ya da bu işlemi kod ile gerçekleştirebiliriz. open() fonksiyonu bilgisayarda oluşturulan bir dosyayı açmak için ya da dosya oluşturmak için kullanılır. open() fonksiyonunun içerisine, eğer bilgisayarınıza yüklü bir Python IDE’si kullanıyorsanız dosyanın bilgisayardaki konumunu yazmanız yeterlidir. Eğer Jupyter gibi tarayıcıda çalışan IDE’ler kullanıyorsanız, dosyayı kullandığınız IDE ortamına yükleyip dosya yolunu open() fonkiyonuna yazmanız yeterlidir. Eğer adını yazdığınız dosya oluşturulmamış ise open() fonksiyonu dosyayı oluşturacaktır. Bu şekilde dosya Python içerisine aktarılmış olacaktır.

INPUT:
open("/content/drive/MyDrive/Colab Notebooks/İstiklal Marşı.txt")

Dosya Okuma

Python’a yüklediğimiz dosyayı bir değişkene atayıp satır satır okumak için readline() komutunu kullanabiliriz.

INPUT:
file = open("/content/drive/MyDrive/Colab Notebooks/İstiklal Marşı.txt")
file.readline().rstrip()

OUTPUT:
  'Korkma, sönmez bu şafaklarda yüzen al sancak;'

Programı her çalıştırdığımızda diğer satırlar ekrana gelmeye devam eder. Eğer herhangi bir satırda, baştan okuma işlemi yapmak istiyorsak seek(0) fonksiyonunu kullanabiliriz. Eğer seek() fonksiyonun içerisine farklı bir değer yazarsak, o değerin karşılık geldiği karakterden sonrasını okuma işlemi yapar. Örnek olarak:

INPUT:
file.seek(2)
file.readline().rstrip()

OUTPUT:
'rkma, sönmez bu şafaklarda yüzen al sancak;'

Dosya Üzerinde For Döngüsü Oluşturma

Dosya üzerinde for döngüsü oluşturup, bütün satırlara erişmek mümkündür.

INPUT:
file.seek(0)
for i in file:
     print(i)


OUTPUT:

Korkma, sönmez bu şafaklarda yüzen al sancak;

Sönmeden yurdumun üstünde tüten en son ocak.

O benim milletimin yıldızıdır, parlayacak;

O benimdir, o benim milletimindir ancak.

Eğer dosya üzerinde yaptığımız işlemler sona erdiyse close() fonksiyonunu kullanıp, dosyayı kapatabiliriz.

INPUT:
file.close()

readlines() fonksiyonunu kullanıp, tüm dosya içeriğini bir listeye dönüştürebiliriz. Örnek olarak:

INPUT:
file = open("/content/drive/MyDrive/Colab Notebooks/İstiklal Marşı.txt")
file_list = file.readlines()
for i in range(0, len(file_list)):
   file_list[i] = file_list[i].rstrip()
file_list  

OUTPUT:

['Korkma, sönmez bu şafaklarda yüzen al sancak;',
 'Sönmeden yurdumun üstünde tüten en son ocak.',
 'O benim milletimin yıldızıdır, parlayacak;',
 'O benimdir, o benim milletimindir ancak.'] 

Örnek

Üyeler adlı bir dosya oluşturalım ve bu dosya içerisine aşağıdaki bilgileri yazalım.

12345-Ali-10-5

6789-Ayşe-20-7

10112-Mustafa-50-15

12134-Gönül-5-8

Kitap satın alma sitesinde üyelerin bilgilerinin bulunduğu bu dosyayı Python’a aktaralım ve listeye dönüştürelim. Ardından Üye bilgilerini sorguladığımız bir program yazalım.

INPUT:
members = open("/content/drive/MyDrive/Colab Notebooks/Üyeler.txt").readlines()
for member in range(len(members)):
    members[member] = members[member].rstrip()
    members[member] = members[member].split("-")
members



OUTPUT:

[['12345', 'Ali', '10', '5'],
 ['6789', 'Ayşe', '20', '7'],
 ['10112', 'Mustafa', '50', '15'],
 ['12134', 'Gönül', '5', '8']]

Böylece dosyadaki üyeleri listeye atıp düzenlemiş olduk. Üye numarası, para ve kitap adedi gibi değerlerin tiplerini for döngüsü ile integer’a dönüştürebiliriz.

INPUT:
for i in members:
  i[0] = int(i[0])
  i[2] = int(i[2])
  i[3] = int(i[3])
members 


OUTPUT:

[[12345, 'Ali', 10, 5],
 [6789, 'Ayşe', 20, 7],
 [10112, 'Mustafa', 50, 15],
 [12134, 'Gönül', 5, 8]]

Şimdi ise gireceğimiz üye numarası ile üyelik bilgilerini sorgulayalım.

INPUT:
MemberNo = input("Lütfen sorgulamak istediğiniz üye numarasını giriniz : ")
if MemberNo.isnumeric():
   for member in members:
       if int(MemberNo) == member[0]:
          print("Üye numarası {0} olan,\nadlı kişinin hesabından {2} Türk lirası bakiye bulunmaktadır.\nŞu zamana kadar {3} adet kitap satın almıştır.".format(member[0],member[1],member[2],member[3]))
          break;
       else:
         print("Üye numarasına ait kişi bulunamadı.")
else:
  print("HATA! SANIRIM YANLIŞ BİR ŞEY OLDU\nÜye numarası sayılardan oluşmalıdır.")


OUTPUT:

Lütfen sorgulamak istediğiniz üye numarasını giriniz : 12345h
HATA! SANIRIM YANLIŞ BİR ŞEY OLDU
Üye numarası sayılardan oluşmalıdır.

Dosya üzerine yazmaya geçmeden evvel şunu hatırlatmakta fayda var; şu ana kadar yaptıklarımız var olan bir dosya üzerinden, yani daha önceden oluşturup veriler girdiğimiz dosya üzerinden gerçekleşmektedir.

Dosya Üzerine Yazma

Dosya oluşturmak ya da var olan bir dosyayı açmak için open() fonkisyonunu kullanıyorduk. open() fonksiyonun içerisine aşağıdaki tabloda yer alan argümanlardan birini girerek dosyanın ne şekilde açılacağına karar verebiliriz.

ArgümanAçıklama
r Salt okuma
w Yazma
aSonuna ekleme
bİkili kip
tSalt metin
+Dosya güncelleme

Eğer var olan bir dosyayı w argümanı ile açarsak, dosyanın içerisindeki tüm içerikler silinir ve boş bir dosya olarak açılmış olur. Açtığımız dosya içerisine write() fonksiyonu ile satır eklemesi yapabilirsiniz. Dosya üzerinde yaptığınız değişiklikleri kaydetmek için flush() fonksiyonu kullanılabilir. Açılan dosya flush() fonksiyonu ile kaydedilmeden kapatılırsa, otomatik kayıt yapılır. Örnek olması için bir dosya oluşturup içerisine bilgiler yazalım.

INPUT:
customers = open("customers.txt","w")
customers_list = [[1245,"Gizem","Borcu yok"],[6789,"Aslı","Borcu Yok"],[6123,"Kerim","Borcu var"]]
for customer in customers_list:
    for i in customer:
        customers.write(str(i)+"-")
    customers.write("\n")    
customers.close()   

customers = open("customers.txt",”r”)
customers.seek(0)
customers_list1 = customers.readlines()
for i in range(0,len(customers_list1)):
   customers_list1[i] = customers_list1[i].rstrip()
customers_list1 


OUTPUT:

['1245-Gizem-Borcu yok-', 
'6789-Aslı-Borcu Yok-', 
'6123-Kerim-Borcu var-']

Örnekler

Aşağıdaki şekilde bir mat.txt dosyası oluşturalım.

   No      Ad-soyad        mat      fizik      kimya

11      Ayşe Gök         60         50         70

12      Ahmet altun   20         40         50

13      Can Emek        80         60         70

14      Nesrin Ay        90          60         20

a) Yukarıdaki şekilde mat.txt dosyası oluşturulması ve verilerin girilmesini sağlayan bir program yazınız.

INPUT:
#Dosyanın Oluşturulması
open("mat.txt", "w")
#Dosyayı yazmak için açıyoruz ve içerisine veri ekliyoruz.
with open("mat.txt", "a")  as  dosya:
    dosya.write("No      Ad-Soyad       Mat     Fizik   Kimya\n")
    dosya.write("11      Ayşe Gök       60       50      70\n")
    dosya.write("12      Ahmet Altun    20       40      50\n")
    dosya.write("13      Can Emek       80       60      70\n")
    dosya.write("14      Nesrin Ay      90       60      20\n")
dosya.close()  

b) Ekrana sadece Numara ad-soyad ve kimya notunu listeleyen bir program yazınız.

INPUT:
with open("mat.txt")  as  dosya:
  dosya.seek(0) 
  liste = dosya.readlines()
  for x in range(0,5):
      a = liste[x:x+1]  
      print(a[0][0:2],"\t",a[0][8:20],"\t",a[0][39:44])

OUTPUT:

No 	 Ad-Soyad     	 Kimya
11 	 Ayşe Gök     	  70

12 	 Ahmet Altun  	  50

13 	 Can Emek     	  70

14 	 Nesrin Ay    	  20

c) Ekrana her üç dersten 50 nin altında alanları listeleyınız.



INPUT:
with open("mat.txt")  as  dosya:
  dosya.seek(0) 
  liste = dosya.readlines()
  Fizikten_Kalanlar = []
  Matematikten_Kalanlar = []
  Kimyadan_Kalanlar = []
  for x in range(1,5):
      a = liste[x:x+1]
      Mat_Not = int(a[0][23:26]) 
      Kimya_Not = int(a[0][39:44])
      Fizik_Not = int(a[0][30:35])
      if Mat_Not < 50: 
         Matematikten_Kalanlar.append("{} kişisi Matematikten {} alarak bu dersten kalmıştır.".format(a[0][8:20],a[0][23:26].rstrip()))
      if Kimya_Not < 50: 
         Kimyadan_Kalanlar.append("{} kişisi Kimyadan {} alarak bu dersten kalmıştır.".format(a[0][8:20],a[0][39:44].rstrip()))
      if Fizik_Not < 50: 
         Fizikten_Kalanlar.append("{} kişisi Fizikten {} alarak bu dersten kalmıştır.".format(a[0][8:20],a[0][30:35].rstrip()))
  print("Matematikten kalanlar : ",Matematikten_Kalanlar)
  print("Fizikten kalanlar : ",Fizikten_Kalanlar)
  print("Kimyadan_Kalanlar : ",Kimyadan_Kalanlar)


OUTPUT:

Matematikten kalanlar :  ['Ahmet Altun  kişisi Matematikten 20 alarak bu dersten kalmıştır.']
Fizikten kalanlar :  ['Ahmet Altun  kişisi Fizikten   40 alarak bu dersten kalmıştır.']
Kimyadan_Kalanlar :  ['Nesrin Ay    kişisi Kimyadan  20 alarak bu dersten kalmıştır.']

PYTNFEXVD4K26M2510

One thought on “Python ile Dosya İşlemleri

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir