Python Dosya İşlemleri I/O

Bu öğreticide Python dosya işlemleri hakkında bilgi edineceksiniz. Daha spesifik olarak, bir dosyayı açma, ondan okuma, içine yazma, kapatma ve bilmeniz gereken çeşitli dosya yöntemleri.

Dosyalar

Dosyalar, ilgili bilgileri depolamak için diskteki adlandırılmış konumlardır. Verileri kalıcı olarak kalıcı bir bellekte (örn. sabit disk) depolamak için kullanılırlar.

Rastgele Erişimli Bellek (RAM) geçici olduğundan (bilgisayar kapatıldığında verilerini kaybeder), dosyaları, verileri kalıcı olarak depolayarak gelecekte kullanmak üzere kullanırız.

Bir dosyadan okumak veya bir dosyaya yazmak istediğimizde önce onu açmamız gerekir. İşimiz bittiğinde, dosyaya bağlı kaynakların serbest kalması için kapatılması gerekiyor.

Bu nedenle, Python’da bir dosya işlemi aşağıdaki sırayla gerçekleşir:

  1. Bir dosya aç
  2. Oku veya yaz (işlemi gerçekleştir)
  3. dosyayı kapat

Python’da Dosya Açmak

open()Python, bir dosyayı açmak için yerleşik bir işleve sahiptir. Bu işlev, dosyayı uygun şekilde okumak veya değiştirmek için kullanıldığından, tutamaç olarak da adlandırılan bir dosya nesnesi döndürür.

Bir dosya açarken modu belirtebiliriz. rModda, dosyayı okumak mı , yazmak mı yoksa dosyaya weklemek mi istediğimizi belirtiriz . aDosyayı metin modunda mı yoksa ikili modda mı açmak istediğimizi de belirtebiliriz.

Varsayılan, metin modunda okumaktır. Bu modda, dosyadan okurken dizeler alırız.

Öte yandan, ikili mod bayt döndürür ve bu, resimler veya yürütülebilir dosyalar gibi metin olmayan dosyalarla uğraşırken kullanılacak moddur.

modTanım
rOkumak için bir dosya açar. (varsayılan)
wYazmak için bir dosya açar. Mevcut değilse yeni bir dosya oluşturur veya varsa dosyayı keser.
xÖzel oluşturma için bir dosya açar. Dosya zaten varsa, işlem başarısız olur.
aDosyayı kesmeden sonuna eklemek için bir dosya açar. Mevcut değilse yeni bir dosya oluşturur.
tMetin modunda açılır. (varsayılan)
bİkili modda açılır.
+Güncelleme için bir dosya açar (okuma ve yazma)

Diğer dillerden farklı olarak, karakter , (veya diğer eşdeğer kodlamalar) akullanılarak kodlanana kadar 97 sayısını ifade etmez .ASCII

Ayrıca, varsayılan kodlama platforma bağlıdır. Windows’ta, cp1252ancak utf-8Linux’ta.

Bu nedenle, varsayılan kodlamaya da güvenmemeliyiz, aksi takdirde kodumuz farklı platformlarda farklı davranacaktır.

Bu nedenle, metin modunda dosyalarla çalışırken, kodlama türünü belirtmeniz önemle tavsiye edilir.


Python’da Dosyaları Kapatmak

Dosya üzerinde işlemlerimiz bittiğinde dosyayı düzgün bir şekilde kapatmamız gerekiyor.

Bir dosyayı kapatmak, dosyaya bağlı olan kaynakları serbest bırakacaktır. close()Python’da bulunan yöntem kullanılarak yapılır .

Python’un başvurulmayan nesneleri temizlemek için bir çöp toplayıcısı vardır, ancak dosyayı kapatmak için ona güvenmemeliyiz.

Bu yöntem tamamen güvenli değildir. Dosya ile bazı işlemler yaparken bir istisna oluşursa, kod dosyayı kapatmadan çıkar.

Daha güvenli bir yol, try…finally bloğunu kullanmaktır.

Bu şekilde, program akışının durmasına neden olan bir istisna ortaya çıksa bile dosyanın düzgün bir şekilde kapatıldığını garanti ediyoruz.

Bir dosyayı kapatmanın en iyi yolu withdeyimi kullanmaktır. withBu, ifadenin içindeki bloktan çıkıldığında dosyanın kapatılmasını sağlar .

close()Yöntemi açıkça çağırmamıza gerek yok . Dahili olarak yapılır.


Python’da Dosyalara Yazma

Python’da bir dosyaya yazmak için onu write w, append aveya özel oluşturma xmodunda açmamız gerekir.

wHalihazırda mevcutsa dosyanın üzerine yazacağından kipte dikkatli olmamız gerekiyor . Bu nedenle, önceki tüm veriler silinir.

write()Metot kullanılarak bir dizi veya bayt dizisi (ikili dosyalar için) yazılır . Bu yöntem, dosyaya yazılan karakter sayısını döndürür.

test.txtBu program , mevcut dizinde yoksa yeni bir dosya oluşturacaktır . Varsa, üzerine yazılır.

Farklı satırları ayırt etmek için yeni satır karakterlerini kendimiz eklemeliyiz.


Python’da Dosya Okumak

Python’da bir dosyayı okumak için dosyayı okuma rmodunda açmalıyız.

Bu amaçla çeşitli yöntemler mevcuttur. read(size)Okumak için yöntemi kullanabilirizboyutveri sayısı. Eğerboyutparametre belirtilmezse dosyayı okur ve dosyanın sonuna kadar döner.

text.txtYukarıdaki bölümde yazdığımız dosyayı şu şekilde okuyabiliriz :

read()Yöntemin olarak yeni bir satır döndürdüğünü görebiliriz '\n'. Dosyanın sonuna ulaşıldığında, daha fazla okumada boş bir dize alırız.

Yöntemi kullanarak mevcut dosya imlecimizi (konumunu) değiştirebiliriz seek(). Benzer şekilde, tell()yöntem mevcut konumumuzu (bayt sayısı olarak) döndürür.

For döngüsü kullanarak bir dosyayı satır satır okuyabiliriz . Bu hem verimli hem de hızlıdır.

Bu programda, dosyanın kendisindeki satırlar bir yeni satır karakteri içerir \nprint()Bu nedenle, yazdırma sırasında iki yeni satırdan kaçınmak için işlevin bitiş parametresini kullanırız.

Alternatif olarak, readline()bir dosyanın tek tek satırlarını okumak için yöntemi kullanabiliriz. Bu yöntem, yeni satır karakteri de dahil olmak üzere yeni satıra kadar bir dosyayı okur.

Son olarak, readlines()yöntem tüm dosyanın kalan satırlarının bir listesini döndürür. Tüm bu okuma yöntemleri, dosyanın sonuna (EOF) ulaşıldığında boş değerler döndürür.


Python Dosya Yöntemleri

Dosya nesnesi ile kullanılabilen çeşitli yöntemler vardır. Bazıları yukarıdaki örneklerde kullanılmıştır.

Kısa bir açıklama ile metin modundaki yöntemlerin tam listesi:

YöntemTanım
kapat()Açılan bir dosyayı kapatır. Dosya zaten kapalıysa hiçbir etkisi yoktur.
ayır()Temeldeki ikili arabelleği, öğesinden ayırır TextIOBaseve onu döndürür.
dosya yok()Dosyanın bir tamsayı numarasını (dosya tanıtıcısı) döndürür.
floş()Dosya akışının yazma arabelleğini temizler.
isatty()TrueDosya akışı etkileşimliyse döner .
okuman(n)en fazla okurndosyadan karakterler. Negatif ise dosyanın sonuna kadar okur veya None.
okunabilir()TrueDosya akışının okunup okunmadığını döndürür .
okuma satırı(n=-1)Dosyadan bir satır okur ve döndürür. En fazla okurnbayt belirtilirse.
okuma satırları(n=-1)Dosyadan satırların bir listesini okur ve döndürür. En fazla okurnbelirtilmişse bayt/karakter.
aramak(telafi etmek,itibaren= SEEK_SET)Dosya konumunu şu şekilde değiştirir:telafi etmekbayt, referans olarakitibaren(başlangıç, akım, bitiş).
aranabilir()TrueDosya akışı rastgele erişimi destekliyorsa döndürür .
söylemek()Dosyanın nesnesinin geçerli konumunu temsil eden bir tamsayı döndürür.
kesmek(boyut= None)Dosya akışını yeniden boyutlandırırboyutbayt. Eğerboyutbelirtilmemişse, geçerli konuma göre yeniden boyutlandırılır.
yazılabilir()TrueDosya akışına yazılabiliyorsa döndürür .
yazmak(s)dize yazarsdosyaya ve yazılan karakter sayısını döndürür.
yazı satırları(çizgiler)bir listesini yazarçizgilerdosyaya.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.