­čôť Dosya ─░┼člemleri

Python dosya i┼člemleri ile okuma, yazma, g├╝ncelleme ve silme i┼člemlerini g├Ârece─čiz.

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.

1. Dosya ─░┼člem Kipleri

Dosyalar ├╝zerinde okuma, yazma, g├╝ncelleme ve silme i┼člemi yapmadan ├Ânce dosyalar─▒m─▒z─▒ hangi modlarda (kiplerde) kullanabilece─čimizi g├Ârelim.

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

2. Dosya Okuma & A├žma ─░┼člemleri

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.

2.1 Dosyay─▒ Se├žme

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.

dosya = open("bilgiler.txt","r",encoding="utf-8")

Art─▒k okuyaca─č─▒m─▒z dosyay─▒ se├žmi┼č bulunuyoruz. Bundan sonra i┼člemlerimize daha rahat devam edebiliriz.

2.2 T├╝m Dosyay─▒ Ekrana Yazd─▒rma / read()

Dosyay─▒ se├žtikten sonra direkt ekrana basmak isteyebiliriz. Bunun i├žin ┼ču ┼čekilde bir kullan─▒m─▒ tercih edebiliriz:

dosya = open("bilgiler.txt","r",encoding="utf-8")
oku = dosya.read()
print(oku)

E─čer biz read() fonksiyonuna bir say─▒ de─čeri verirsek sadece o say─▒ de─čeri kadar alan─▒ okuyacakt─▒r. Hemen g├Ârelim.

dosya = open("bilgiler.txt","r",encoding="utf-8")
oku = dosya.read(10) #Sadece ilk 10 karakteri okur
print(oku)

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.

2.3 Her Seferinde S─▒radaki Sat─▒r─▒ Ekrana Yazd─▒rma / 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.

dosya = open("bilgiler.txt","r",encoding="utf-8")
ÔÇő
print(dosya.readline()) #1.sat─▒r─▒ yazd─▒r
print(dosya.readline()) #2.sat─▒r─▒ yazd─▒r
print(dosya.readline()) #3.sat─▒r─▒ yazd─▒r

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.

2.4 Dosyay─▒ Sat─▒r Sat─▒r D├Âng├╝yle Ekrana Yazd─▒rma / 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

dosya = open("a.txt","r")
for satir in dosya:
print(satir)

Y├Ântem-2

with open("a.txt","r") as dosya:
for satir in dosya:
print(satir)

2.5 Dosyan─▒n Her Sat─▒r─▒n─▒ Diziye Eklemek / 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.

Komut
Çıktı
Komut
dosya = open("a.txt","r")
dizi = dosya.readlines()
print(dizi)
Çıktı
['a\n', 'b\n', 'c\n', 'd\n', 'e']

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.

3- Dosyaya Yazma ─░┼člemleri

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.

3.1 w Moduyla Dosyaya Veri Yazmak

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.

dosya = open("bilgiler.txt","w",encoding="utf-8")
ÔÇő
dosya.write("Kerteriz ile Python Dosya ─░┼člemleri\n")
dosya.write("Buras─▒ 2. sat─▒r oluyor art─▒k")
dosya.write("3.sat─▒ra inmeden 2.sat─▒r─▒n sonundan itibaren yaz─▒yor")

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)

3.2 a Moduyla Dosyaya Veri Yazmak

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.

dosya = open("bilgiler.txt","a",encoding="utf-8")
ÔÇő
dosya.write("Kerteriz ile Python Dosya ─░┼člemleri\n")
dosya.write("Buras─▒ 2. sat─▒r oluyor art─▒k")
dosya.write("3.sat─▒ra inmeden 2.sat─▒r─▒n sonundan itibaren yaz─▒yor")

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.

4. Dosya Silmek

Dosyalar─▒n─▒z─▒ silmek istedi─činizde os mod├╝l├╝n├╝ program─▒n─▒za dahil etmeniz gerekiyor. Ard─▒ndan remove() fonksiyonu sile dosyan─▒z─▒ silebilirsiniz.

import os
os.remove("dosya.txt")

E─čer silmek istedi─činiz nesne bir klas├Ârse bu sefer rmdir() fonksiyonunu kullanmal─▒s─▒n─▒z.

import os
os.rmdir("resimler")

5. Dosyalar─▒ Kapatmak

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.

dosya = open("bilgiler.txt","a",encoding="utf-8")
dosya.close()

├ç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.

with open("bilgiler.txt","a",encoding="utf-8") as dosya:
#kullan─▒cak fonksiyonlar
#......
#......

6. ├ľzel Dosya Fonksiyonlar─▒

6.1 Dosyan─▒n Var Olup Olmad─▒─č─▒n─▒ Kontrol Etmek

├ť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.

import os
ÔÇő
if os.path.exists("bilgiler.txt"):
print("Dosya var")
else:
print("Dosya mevcut de─čil!")

6.2 ─░mlecin Nerede Oldu─čunu ├ľ─črenme

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.

with open("bilgiler.txt","r",encoding = "utf-8") as dosya:
print(dosya.tell())

├ľ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.

6.3 Dosyan─▒n Belirli Bir Byte'─▒na ─░mleci Koymak

E─čer imlecimizi dosyada istedi─čimiz bir byte'a koymak istiyorsak bunu ┼ču ┼čekilde yapabiliriz.

with open("bilgiler.txt","r",encoding = "utf-8") as dosya:
print(dosya.seek(20)) #20. byte'a imleci koyar

6.4 Dosyan─▒n Sonuna Veri Eklemek

Bu i┼člem i├žin dosyay─▒ a kipinde a├ž─▒p write ile verilerinizi eklemeniz yeterli olacakt─▒r

6.5 Dosyan─▒n Ba┼č─▒na Veri Eklemek

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:

with open("bilgiler.txt","r+",encoding = "utf-8") as dosya:
icerik = dosya.read()
yeniicerik = "Bu metini ilk sat─▒ra ekliyorum\n" + icerik
dosya.seek(0)
dosya.write(yeniicerik)

─░┼čte bu kadar basit. Sadece farkl─▒ olarak dosyay─▒ r+ modunda a├žt─▒k ├ž├╝nk├╝ dosyay─▒ hem okuyor, hem yaz─▒yoruz.