Bu yazıda, Python dosya işlemleri hakkında bilgi edineceksiniz. Daha spesifik olarak, bir dosyayı açmak, okumak, içine yazmak, kapatmak ve dikkat etmeniz gereken çeşitli dosya yöntemleri hakkında bilgileri bu makalede bulacaksınız.
Dosya nedir?
Dosya, ilgili bilgileri depolamak için diskte adlandırılmış bir konumdur. Verileri kalıcı bir bellekte (örn. Sabit disk) kalıcı olarak saklamak için kullanılır.
Rasgele erişim belleği (RAM), bilgisayar kapalıyken verilerini kaybeden uçucu olduğundan, verileri ileride kullanmak için dosyaları 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 bırakılması için kapatılması gerekir.
Bu nedenle, Python’da bir dosya işlemi aşağıdaki sırayla gerçekleşir.
- Bir dosya aç
- Okuma veya yazma (işlemi gerçekleştir)
- Dosyayı kapat
Python kullanarak bir dosya nasıl açılır?
Python’un bir dosyayı açmak için dahili bir işlevi open () vardır. Bu işlev, dosyayı buna göre okumak veya değiştirmek için kullanıldığından, tanıtıcı olarak da adlandırılan bir dosya nesnesi döndürür.
1 2 3 4 | >>> f = open("dosya.txt") # geçerli dizide dosyayı açar >>> f = open("C:/Python33/dosya.txt") # özel tam yol belirtme |
Bir dosyayı açarken modu belirleyebiliriz. Modda, dosyaya ‘r’ okumak, ‘w’ yazmak ya da ‘a’ eklemek isteyip istemediğimizi belirleriz. Ayrıca dosyayı metin modunda mı yoksa ikili modda mı açmak istediğimizi belirtiriz.
Varsayılan metin modunda okumaktır. Bu modda, dosyadan okurken dizeler alırız.
Diğer yandan, ikili mod bayt döndürür ve bu görüntü veya exe dosyaları gibi metin olmayan dosyalarla uğraşırken kullanılacak moddur.
Python Dosya Modları
Mod | Tanımı |
---|---|
‘r’ | Okumak için bir dosya açın. (varsayılan) |
‘w’ | Yazmak için bir dosya açın. Varsa yeni bir dosya oluşturur veya varsa keser. |
‘x’ | Özel oluşturma için bir dosya açın. Dosya zaten varsa, işlem başarısız olur. |
‘a’ | Dosyanın sonuna kırpmadan eklemek için açın. Yoksa yeni bir dosya oluşturur. |
‘t’ | Metin modunda açın. (varsayılan) |
‘b’ | İkili modda açın. |
‘+’ | Güncellemek için bir dosya açın (okuma ve yazma) |
1 2 3 4 5 | f = open("dosya.txt") # 'r' veya 'rt' ile eşdeğer f = open("dosya.txt",'w') # metin modunda yaz f = open("resim.bmp",'r+b') # ikili modda okuma ve yazma |
Diğer dillerden farklı olarak, ‘a’ karakteri ASCII (veya diğer eşdeğer kodlamalar) kullanılarak kodlanana kadar 97 sayısını ifade etmez.
Ayrıca, varsayılan kodlama platforma bağlıdır. Windows’da Linux’ta ‘cp1252’ ama ‘utf-8’.
Bu nedenle, varsayılan kodlamaya da güvenmemeliyiz, yoksa kodumuz farklı platformlarda farklı davranacaktır.
Bu nedenle, metin modundaki dosyalarla çalışırken, kodlama türünü belirtmeniz önemle tavsiye edilir.
1 2 3 | f = open("dosya.txt",mode = 'r',encoding = 'utf-8') |
Python kullanarak dosya nasıl kapatılır?
Dosya işlemleri tamamlandığında, dosyayı düzgün bir şekilde kapatmamız gerekir.
Bir dosyanın kapatılması, dosyaya bağlı olan kaynakları serbest bırakır ve Python close() yöntemi kullanılarak yapılır.
Python, referanssız nesneleri temizlemek için bir çöp toplayıcıya sahiptir, ancak dosyayı kapatmak için ona güvenmemeliyiz.
1 2 3 4 5 | f = open("dosya.txt",encoding = 'utf-8') # dosya işlemleri gerçekleştirmek f.close() |
Bu yöntem tamamen güvenli değildir. Dosyayla bir işlem gerçekleştirirken bir istisna oluşursa, kod dosyayı kapatmadan çıkar.
Daha güvenli bir yol denemek try…finally kullanmaktır.
1 2 3 4 5 6 7 | try: f = open("dosya.txt",encoding = 'utf-8') # dosya işlemleri gerçekleştirme finally: f.close() |
Bu şekilde, bir istisna oluşsa bile dosyanın düzgün bir şekilde kapatılması ve program akışının durmasına neden oluruz.
Bunu yapmanın en iyi yolu with deyimini kullanmaktır. Bu, içindeki bloktan çıkıldığında dosyanın kapatılmasını sağlar.
close() yöntemini açıkça çağırmamız gerekmez. Dahili olarak yapılır.
1 2 3 4 | with open("test.txt",encoding = 'utf-8') as f: # dosya işlemleri gerçekleştirmek |
Python kullanarak dosyaya nasıl yazılır?
Python’da bir dosyaya yazmak için dosyayı ‘w’ yazarak açmamız, ‘a’ veya özel oluşturma ‘x’ modunda eklememiz gerekir.
Zaten mevcutsa dosyanın üzerine yazılacağı için ‘w‘ moduna dikkat etmeliyiz. Önceki tüm veriler silinir.
Bir dize veya bayt dizisi yazmak (ikili dosyalar için) write() yöntemi kullanılarak yapılır. Bu yöntem, dosyaya yazılan karakter sayısını döndürür.
1 2 3 4 5 6 | with open("dosya.txt",'w',encoding = 'utf-8') as f: f.write("ilk satır file\n") f.write("Bu bir dosyadır\n\n") f.write("burası da üçüncü değil dördüncü satır\n") |
Bu program yoksa, ‘dosya.txt’ adlı yeni bir dosya oluşturur. Varsa, üzerine yazılır.
Farklı satırları ayırt etmek için yeni satır karakterlerini kendimiz eklemeliyiz.
Python kullanarak dosyalar nasıl okunur?
Python’da bir dosyayı okumak için dosyayı okuma modunda açmamız gerekir.
Bu amaç için çeşitli yöntemler mevcuttur. Verilerin boyut sayısını okumak için read(size) yöntemini kullanabiliriz. size parametresi belirtilmezse, dosyanın sonuna kadar okur ve geri döner.
1 2 3 4 5 6 7 8 9 10 11 12 | >>> f = open("dosya.txt",'r',encoding = 'utf-8') >>> f.read(4) # ilk dört kaydı okur 'ilk ' >>> f.read(4) # sonraki 4 kaydı okur 'satı' >>> f.read() # dosya sonuna kadar okur 'r file\nBu bir dosyadır\n\nburası da üçüncü satır\n' >>> f.read() # daha fazla okuma boş dize döndürür '' >>> |
Bunu görebiliriz, read() yöntemi yeni satırı ‘\n’ olarak döndürür. Dosya sonuna gelindiğinde, daha fazla okuma için boş dize alırız.
Mevcut dosya imlecimizi (pozisyon) seek() yöntemini kullanarak değiştirebiliriz. Benzer şekilde, tell() yöntemi geçerli konumumuzu döndürür (bayt sayısı olarak).
1 2 3 4 5 6 7 8 9 10 11 12 13 | >>> f.tell() # dosyanın mevcut pozisyonunu getir 67 >>> f.seek(0) # kursörü dosyanın başına taşı 0 >>> print(f.read()) # mevcut konumdan dosyayı oku ilk satır file Bu bir dosyadır burası da üçüncü satır >>> |
for döngüsünü kullanarak bir dosyayı satır satır okuyabiliriz. Bu hem verimli hem de hızlıdır.
1 2 3 4 5 | f = open("dosya.txt",'r',encoding = 'utf-8') for satir in f: print(satir, end = '') |
Çıktı:
1 2 3 4 5 6 | ilk satır file Bu bir dosyadır burası da üçüncü satır |
Dosyadaki satırların yeni satır karakteri ‘\n’ vardır.
Ayrıca, yazdırırken iki satırdan kaçınmak için print() end parametresi.
Alternatif olarak, bir dosyanın satırlarını okumak için readline() yöntemini kullanabiliriz. Bu yöntem, satırsonu karakteri de dahil olmak üzere satırsonuna kadar bir dosyayı okur.
1 2 3 4 5 6 7 8 9 10 11 | >>> f = open("dosya.txt",'r',encoding = 'utf-8') >>> f.readline() 'ilk satır file\n' >>> f.readline() 'Bu bir dosyadır\n' >>> f.readline() '\n' >>> f.readline() 'burası da üçüncü satır\n' |
Son olarak, readlines() yöntemi tüm dosyanın kalan satırlarının listesini döndürür. Tüm bu okuma yöntemi dosya sonuna (EOF) ulaşıldığında boş değerler döndürür.
1 2 3 4 | >>> f.readlines() ['ilk satır file\n', 'Bu bir dosyadır\n', '\n', 'burası da üçüncü satır\n'] |
Python Dosya Metotları
Dosya nesnesiyle kullanılabilecek çeşitli yöntemler vardır. Bazıları yukarıdaki örneklerde kullanılmıştır.
Kısa bir açıklama ile metin modunda yöntemlerin tam listesi.
Method | Tanım |
---|---|
close() | Açık bir dosyayı kapatın. Dosya zaten kapatılmışsa hiçbir etkisi yoktur. |
detach() | Temel ikili arabelleği TextIOBase’den ayırın ve döndürün. |
fileno() | Dosyanın bir tamsayı numarasını (dosya tanıtıcı) döndürün. |
flush() | Dosya akışının yazma arabelleğini yıkayın. |
isatty() | Dosya akışı etkileşimli ise True döndür. |
read(n) | Dosyadan en fazla n karakter okuyun. Negatif veya Yok ise dosyanın sonuna kadar okuyun. |
readable() | Dosya akışı okunabiliyorsa True değerini döndürür. |
readline(n=-1) | Dosyadan bir satır okuma ve döndürme. Belirtilirse en fazla n bayt okur. |
readlines(n=-1) | Dosyadan satırların listesini okuyun ve döndürün. Belirtilirse en fazla n bayt / karakter okur. |
seek(offset,from=SEEK_SET ) | Dosya konumunu, (başlangıç, akım, bitiş) değerine göre ofset bayt olarak değiştirin. |
seekable() | Dosya akışı rasgele erişimi destekliyorsa True değerini döndürür. |
tell() | Geçerli dosya konumunu döndürür. |
truncate(size=None ) | Dosya akışını bayt boyutuna göre yeniden boyutlandırın. Boyut belirtilmezse, geçerli konuma yeniden boyutlandırın. |
writable() | Dosya akışı yazılabilirse True değerini döndürür. |
write(s) | Dosyaya d dizeleri yazın ve yazılan karakter sayısını döndürün. |
writelines(lines) | Dosyaya bir satır listesi yazın. |
1 Yorum