Dosyalara ilişkin olarak bir önceki bölümde anlattığımız şeylerin kafanıza yatması açısından size şu bilgiyi de verelim:
Dosyalar da, tıpkı karakter dizileri ve listeler gibi, Python programlama dilindeki veri tiplerinden biridir.
Dolayısıyla tıpkı karakter dizileri ve listeler gibi, dosya (file) adlı bu veri tipinin de bazı metotları ve nitelikleri vardır. Gelin isterseniz bu metot ve niteliklerin neler olduğunu şöyle bir listeleyelim:
dosya = open("falanca_dosya.txt", "w")
print(*[metot for metot in dir(dosya) if not metot.startswith("_")], sep="\n")
Bu kodlar, dosya adlı veri tipinin bizi ilgilendiren bütün metotlarını alt alta ekrana basacaktır. Eğer yukarıdaki kodları anlamakta zorluk çektiyseniz, bunları şöyle de yazabilirsiniz:
dosya = open("falanca_dosya.txt", "w")
for metot in dir(dosya):
if not metot.startswith("_"):
print(metot, sep="\n")
Bildiğiniz gibi bu kodlar bir öncekiyle tamamen aynı anlama geliyor.
İncelemediğimiz yalnızca birkaç önemli metot (ve nitelik) kaldı. Gelin isterseniz henüz incelemediğimiz bu önemli metot ve nitelikleri gözden geçirelim.
closed Niteliği
Bu nitelik, bir dosyanın kapalı olup olmadığını sorgulamamızı sağlar. Dosya adının f olduğunu varsayarsak, bu niteliği şöyle kullanıyoruz:
f.closed
Eğer f adlı bu dosya kapalıysa True çıktısı, açıksa False çıktısı verilecektir.
readable() Metodu
Bu metot bir dosyanın okuma yetkisine sahip olup olmadığını sorgulamamızı sağlar.
Eğer bir dosya “r” gibi bir kiple açılmışsa, yani o dosya ‘okunabilir’ özellikle ise bu metot bize True çıktısı verir. Ama eğer dosya yazma kipinde açılmışsa bu metot bize False çıktısı verecektir.
writable() Metodu
Bu metot bir dosyanın yazma yetkisine sahip olup olmadığını sorgulamamızı sağlar.
Eğer bir dosya “w” gibi bir kiple açılmışsa, yani o dosya ‘yazılabilir’ özellikle ise bu metot bize True çıktısı verir. Ama eğer dosya okuma kipinde açılmışsa bu metot bize False çıktısı verecektir.
truncate() Metodu
Bu metot, henüz işlemediğimiz metotlar arasında en önemlilerinden biridir. Bu metot yardımıyla dosyalarımızı istediğimiz boyuta getirebiliyoruz.
İngilizcede truncate kelimesi ‘budamak, kırpmak’ gibi anlamlara gelir. Bu metodu temel olarak şöyle kullanıyoruz:
>>> with open("falanca.txt", "r+") as f:
... f.truncate()
Bu komutu bu şekilde kullandığımızda dosyanın bütün içeriği silinecektir.
truncate()
metodu yukarıda gördüğünüz şekilde parametresiz olarak kullanılabileceği gibi, parametreli olarak da kullanılabilir. Bu metodun parantezleri arasına, dosyanın kaç baytlık bir boyuta sahip olmasını istediğinizi yazabilirsiniz. Örneğin:
>>> with open("falanca.txt", "r+") as f:
... f.truncate(10)
Bu kodlar, falanca.txt adlı dosyanın ilk 10 baytı dışındaki bütün verileri siler.
Gelin isterseniz bu metotla ilgili bir örnek verelim. Elimizdeki dosyanın şu içeriğe sahip olduğunu varsayalım:
Ahmet Özbudak : 0533 123 23 34
Mehmet Sülün : 0532 212 22 22
Sami Sam : 0542 333 34 34
Amacımız dosyadaki şu iki satırı tamamen silmek:
Mehmet Sülün : 0532 212 22 22
Sami Sam : 0542 333 34 34
Bunun için truncate()
metodundan yararlanarak şu kodları yazabiliriz:
with open("fihrist.txt", "r+") as f:
f.readline()
f.seek(f.tell())
f.truncate()
Burada sırasıyla şu işlemleri gerçekleştirdik:
- Önce dosyamızı hem okuma hem de yazma kipinde açtık. :with open(“fihrist.txt”, “r+”) as f:
- Ardından dosyadan tek bir satır okuduk: f.readline()
- Daha sonra,
truncate()
metodunun imleç konumundan itibaren kırpma işlemi gerçekleştirebilmesi için imleci dosya içinde o anda bulunduğumuz konuma, yani ikinci satırın başına getirdik: f.seek(f.tell()) - İmleci istediğimiz konuma getirdiğimize göre artık kırpma işlemini gerçekleştirebiliriz: f.truncate()
truncate()
metodunun, yukarıda anlattığımızdan farklı bir özelliği daha var. Her ne kadar truncate kelimesi ‘kırpmak’ anlamına gelse de bu metodu kullanarak aynı zamanda dosya boyutlarını artırabiliriz de.
Örneğin boyutu 1 kilobayt olan bir dosyayı 3 kilobayta çıkarmak için bu metodu şöyle kullanabiliriz:
>>> f = open("fihrist.txt", "r+")
>>> f.truncate(1024*3)
>>> f.close()
Bu metot bu işi nasıl yapıyor? Aslında bunun cevabı çok basit: Dosyanın sonuna gereken miktarda 0 ekleyerek… Eğer fihrist.txt adlı bu dosyayı tekrar açıp okursanız bu durumu kendiniz de görebilirsiniz:
>>> f = open("fihrist.txt")
>>> f.read()
Gördüğünüz gibi, dosya sıfırlarla dolu.
mode Niteliği
Bu nitelik, bize bir dosyanın hangi kipte açıldığına dair bilgi verir:
>>> f = open("falanca.txt")
>>> f.mode
'r'
Demek ki bu dosya “r” kipinde açılmış…
name Niteliği
Bu nitelik, bize bir dosyanın adını verir:
>>> f.name
'falanca.txt'
encoding Niteliği
Bu nitelik, bize bir dosyanın hangi dil kodlaması ile kodlandığını söyler:
>>> f.encoding
'utf-8'
veya:
>>> f.encoding
'cp1254' #Windows
Bu ‘dil kodlaması’ konusunu ilerleyen sayfalarda ayrıntılı olarak inceleyeceğiz.
Bu arada, gerek bu derste, gerekse önceki derslerde verdiğimiz örneklerden, ‘metot’ ile ‘nitelik’ kavramları arasındaki farkı anladığınızı zannediyorum. Metotlar bir iş yaparken, nitelikler bir değer gösterir.
Nitelikler basit birer değişkenden ibarettir. Metotlar ise bir işin nasıl yapılacağı ile ilgili süreci tanımlar.
Bu eğitim seti Kaynak tarafından oluşturulmuştur.