Python – Dosyalar
Dosya Açma ve Yazma İşlemleri
Bu konuyla beraber dosya üzerinde işlemler yapmaya başlayacağız.
Dosya Açmak
Bir dosyayı açmak için open() fonksiyonunu kullanıyoruz. Yapısı şu şekildedir;
1 |
open(dosya_adı,dosya_erişme_kipi) |
Dosya adını istediğimiz isimde verebiliriz. Dosya erişme kipi ise bizim dosya üzerindeki işlemlerimizi belirler. Bunları dersler boyunca yavaş yavaş göreceğiz.
“w” dosya kipi
Dosyalarımızı açmak ve dosyalarımıza yazmak için “write” anlamına gelen “w” kipini kullanıyoruz. “w” kipi eğer oluşturmak istediğimiz dizinde öyle bir dosya yoksa dosyayı oluşturuyor , eğer öyle bir dosya varsa dosyayı silip tekrar oluşturuyor. Yani, eğer açmak istediğimiz dosyadan zaten varsa ve dosyanın içi doluysa “w” kipi dosyadaki bilgileri silip tekrar oluşturacaktır. (Biraz Tehlikeli)
1 |
open("bilgiler.txt","w") # Dosyayı bulunduğumuz dizinde açıyor. |
1 |
file = open("bilgiler.txt","w") # Dosya üzerinde işlem yapacak dosya imlecini file isimli değişkene atıyoruz. |
Dosyaları Kapatmak
Bir dosya üzerinde işlem yaptığımızda o dosyayı kapatmak sistem kaynaklarının gereksiz kullanılmaması açısından önemlidir. Çünkü programımız bitse bile dosyanın kapanacağı garanti değildir. Bu yüzden işlerimiz bittiği zaman dosyayı kapatmalıyız.
1 |
file.close() # Dosyayı kapatmak |
Eğer bir dosyayı bulunduğumuz dizinde değil de başka bir dizinde açmak istersek, dizinin yolunu özellikle belirtmeliyiz.
(Windows işletim sistemi kullanıyorum. Başka işletim sistemleri için yapamazsanız bana ulaşabilirsiniz 🙂 )
1 2 |
file = open("C:/Users/user/Desktop/bilgiler.txt","w") # çalıştırdığımızda masaüstünde bilgiler.txt oluşacaktır. file.close() # Unutmayalım. |
“w” Kipiyle Dosyalara Yazmak
İlk olarak dosyayı “w” kipiyle açıyoruz.
1 2 3 4 |
file = open("bilgiler.txt","w",encoding="utf-8") # Türkçe karakter kullanacaksak encoding="utf-8" parametresini veriyoruz. file.write("Mustafa Murat Coşkun") # write fonksiyonu ile dosyamıza yazıyoruz. 20 bytelık yani 20 karakter yazıldı. file.close() |
Gördüğümüz gibi write fonksiyonuyla dosyamıza herhangi bir şey yazabiliyoruz. Ancak “w” kipi her seferinde dosyayı tekrar oluşturduğu için dosyayı tekrar açtığımızda bilgiler kaybolacaktır.
1 2 |
file = open("bilgiler.txt","w",encoding="utf-8") file.close() |
“a” Kipiyle Dosyalara Yazmak
“append” (ekleme) kelimesinin kısaltması olan “a” kipiyle bir dosyayı açtığımızda , dosya eğer yoksa oluşturulur. Eğer öyle bir dosya mevcut ise, dosya tekrar oluşturulmaz ve dosya imleci dosyanın sonuna giderek dosyaya ekleme yapmamızı sağlar.
1 2 3 |
file = open("bilgiler.txt","a",encoding="utf-8") file.write("Mustafa Murat Coşkun") file.close() |
Dosyayı tekrar açalım.
1 2 3 |
file = open("bilgiler.txt","a",encoding="utf-8") file.write("Mehmet Gençol") # Dosyanın sonuna ekleme yaptık. file.close() |
Ancak eğer buradaki isimleri dosyalara alt alta yazmak istersek “\n” karakterini kullanmalıyız.
1 2 3 4 |
file = open("bilgiler.txt","a",encoding="utf-8") file.write("Mustafa Murat Coşkun\n") file.write("Mehmet Gençol\n") file.close() |
Dosya Okuma İşlemleri
Dosyaları okumak ve verileri almak için “r” kipiyle açmamız gerekiyor. “r” kipiyle açtığımız dosya eğer bulunmuyorsa “FileNotFoundError” hatası dönecektir. Şimdi bulunduğumuz dizinde bulunan “bilgiler.txt” dosyasını açalım.
1 2 |
file = open("bilgiler.txt","r", encoding="utf-8") file.close() |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
file = open("bilgiler2.txt","r",encoding="utf-8") # böyle bir dosya yok . O yüzden FileNotFoundError hatası döndü. """ Çıktı --------------------------------------------------------------------------- FileNotFoundError Traceback (most recent call last) <ipython-input-10-4bbe98bb1ec9> in <module>() ----> 1 file = open("bilgiler2.txt","r",encoding="utf-8") # böyle bir dosya yok . O yüzden FileNotFoundError hatası döndü. FileNotFoundError: [Errno 2] No such file or directory: 'bilgiler2.txt' """ |
Dosya işlemlerini daha güvenli yazmak try,except bloklarını kullanabilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 |
try: file = open("bilgiler2.txt","r",encoding= "utf-8") except FileNotFoundError: print("Dosya Bulunamadı....") """ Çıktı Dosya Bulunamadı """ |
Peki bir dosyanın içinden bilgileri nasıl okuyacağız ? Bunun için Pythonda değişik yöntemler bulunuyor. İsterseniz bu yöntemleri tek tek görmeye çalışalım.
For döngüsü ile okuma
Şöyle bir kullanım dosyamızdaki herbir satırı tek tek okuyacaktır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
""" Diyelim ki dosyamızın içeriği bu şekilde. Mustafa Murat Coşkun Mehmet Gençol Oğuz Artıran Serhat Say Mert Erarslan """ file = open("bilgiler.txt","r",encoding= "utf-8") # Dosyayı okuma kipiyle açıyoruz. Türkçe karaktere dikkat. for i in file: # Tıpkı listeler gibi dosyanın her bir satırı üzerinde geziniyoruz. print(i) # Her bir satırı ekrana basıyoruz. file.close() """ Çıktı Mustafa Murat Coşkun Mehmet Gençol Oğuz Artıran Serhat Say Mert Erarslan """ |
Burada her bir satırımız boşluklu yazıldı. Bunun nedeni, hem her satır sonunda “\n” karakterinin olması hem de print fonksiyonun bir alt satıra geçmek için boşluk bırakmasıdır. Bunu önlemek için varsayılan değer olarak “\n” karakteri alan end parametresine kendimiz değer verebiliriz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
file = open("bilgiler.txt","r",encoding= "utf-8") # Dosyayı okuma kipiyle açıyoruz. Türkçe karaktere dikkat. for i in file: # Tıpkı listeler gibi dosyanın her bir satırı üzerinde geziniyoruz. print(i,end = "") # Her bir satırı ekrana basıyoruz. end parametresi \n yerine boşluk alacak. file.close() """ Çıktı Mustafa Murat Coşkun Mehmet Gençol Oğuz Artıran Serhat Say Mert Erarslan """ |
read() fonksiyonu
read() fonksiyonu eğer içine hiçbir değer vermezsek bütün dosyamızı okuyacaktır.
read() fonksiyonuna değer vererek belli bir kısmı okumayı bir sonraki dersimizde görmeye çalışsak daha doğru olur.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
file = open("bilgiler.txt","r",encoding="utf-8") icerik = file.read() print("Dosya İçeriği:\n",icerik,sep ="") file.close() """ Çıktı Dosya İçeriği: Mustafa Murat Coşkun Mehmet Gençol Oğuz Artıran Serhat Say Mert Erarslan """ |
read() fonksiyonuyla bir dosyayı okuduğumuzda dosya imlecimiz dosyanın en sonuna gider ve read() fonksiyonu 2. okuma da artık boş string döner.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
file = open("bilgiler.txt","r",encoding="utf-8") icerik = file.read() print("1. Okuma : Dosya İçeriği:\n",icerik,sep ="") icerik2 = file.read() print("2. Okuma : Dosya İçeriği:\n",icerik2,sep ="") file.close() """ Çıktı 1. Okuma : Dosya İçeriği: Mustafa Murat Coşkun Mehmet Gençol Oğuz Artıran Serhat Say Mert Erarslan 2. Okuma : Dosya İçeriği: """ |
readline() fonksiyonu
readline() fonksiyonu her çağrıldığında dosyanın sadece bir satırını okur. Her seferinde dosya imlecimiz (file) bir satır atlayarak devam eder.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
file = open("bilgiler.txt","r",encoding="utf-8") print(file.readline()) print(file.readline()) print(file.readline()) print(file.readline()) print(file.readline()) # Okuyacak herhangi bir şey kalmayınca readline fonksiyonu boş string döner. file.close() """ Çıktı Mustafa Murat Coşkun Mehmet Gençol Oğuz Artıran Serhat Say Mert Erarslan """ |
readlines() fonksiyonu
readlines() fonksiyonu dosyanın bütün satırları bir liste şeklinde döner.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
file = open("bilgiler.txt","r",encoding="utf-8") file.readlines() file.close() """ Çıktı ['Mustafa Murat Coşkun\n', 'Mehmet Gençol\n', 'Oğuz Artıran\n', 'Serhat Say\n', 'Mert Erarslan\n'] """ |
Dosyalarda Kullanılan Fonksiyonlar
Dosyalarda işlemlerimiz bittiği zaman dosyamızı kapatmamız gerektiğini biliyoruz. Ancak programlamacılık doğası gereği çoğu zaman dosyaları kapatmayı unutabiliriz. Bunun için Pythonda dosyalarda işimiz bitince otomatik kapatma özelliği bulunuyor. Bundan sonra Pythonda dosya işlemlerimizi şu blok içinde yapacağız.
1 2 |
with open(dosya_adı,dosya_kipi) as file: Dosya işlemleri |
Örneğimize bakalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
with open("bilgiler.txt","r",encoding = "utf-8") as file: for i in file: print(i) """ Çıktı Mustafa Murat Coşkun Mehmet Gençol Oğuz Artıran Serhat Say Mert Erarslan """ |
Eğer dosya işlemlerini bu blok içinde yaparsak işlemimiz bittiği zaman dosyamız otomatik olarak kapanacaktır.
Dosyaları İleri Geri Sarmak
Biliyorsunuz önceki dersimizde dosyaları okurken sadece dosyanın en başından başlayabiliyorduk ve dosya imlecimiz okuma işleminin sonunda , dosyanın en sonuna gidiyordu. Ancak biz çoğu zaman dosya imlecini (file) dosyanın herhangi bir yerine götürmek isteyebiliriz. Bunun için Pythondaki seek() fonksiyonunu kullanacağız. Ancak ondan önce dosya imlecinin hangi byteda olduğunu söyleyen tell() fonksiyonuna bakalım.
1 2 3 4 5 6 7 8 |
with open("bilgiler.txt","r",encoding = "utf-8") as file: print(file.tell()) """ Çıktı 0 """ |
Şu anda hiçbir işlem yapmadığımız için tell() fonksiyonu dosyanın en başında (0. byteda) olduğumuzu söyledi. Peki bir dosya imlecini dosyanın 20.byte’ına götürmek için ne yapacağız ? Bunun için de seek() fonksiyonunu kullanacağız.
1 2 3 4 5 6 7 8 9 10 |
with open("bilgiler.txt","r",encoding = "utf-8") as file: file.seek(20) # 20.byte götürdük. print(file.tell()) """ Çıktı 20 """ |
Peki biz bir dosyanın belirli bir byte’ına(karakter) gidip sadece belli sayıda karakteri nasıl okuyacağız ? Eğer biz read() fonksiyonuna bir sayı değeri verirsek sadece o sayı değeri kadar alanı okuyacaktır. Hemen görelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
with open("bilgiler.txt","r",encoding = "utf-8") as file: file.seek(5) # 5.byte gidiyoruz. icerik = file.read(10) # 10 karakteri okuyoruz. print(icerik) print(file.tell()) """ Çıktı n,Java,C,P 15 """ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
with open("bilgiler.txt","r",encoding = "utf-8") as file: file.seek(5) # 5.byte gidiyoruz. icerik = file.read(10) # 10 karakteri okuyoruz. print(icerik) file.seek(0) icerik2 = file.read(6) print(icerik2) """ Çıktı n,Java,C,P Python """ |
Dosyalarda Değişiklik Yapmak
Eğer biz bir dosyanın belli bir yerine seek() fonksiyonu ile gidip, write() fonksiyonunu kullanırsak, yazdığımız değerler öncesinde bulunan değerlerin üzerine yazılacaktır. Bunun için hem okuma hem de yazma işlemimizi yapmamızı sağlayan “r+” kipini kullanacağız. İlk önce dosyamızda bilgileri görelim.
1 2 3 4 5 6 7 8 9 10 11 12 |
with open("bilgiler.txt","r+",encoding = "utf-8") as file: print(file.read()) """ Çıktı Mustafa Murat Coşkun Oğuz Artıran Serhat Say Mehmet Gençol """ |
1 2 3 |
with open("bilgiler.txt","r+",encoding = "utf-8") as file: file.seek(10) # 10. byte file.write("Deneme") |
1 2 3 4 5 6 7 8 9 10 11 |
with open("bilgiler.txt","r+",encoding = "utf-8") as file: print(file.read()) """ Çıktı Mustafa MuDenemeşkun Oğuz Artıran Serhat Say Mehmet Gençol """ |
Bu şekilde bir şeyler yapmak isterseniz bu yöntemi kullanabilirsiniz
Dosyanın Sonunda Değişiklik Yapmak
Bu işlemlerin en kolayıyla başlayalım. Dosyaların sonunda değişiklik yapmak için, dosyamızı “a” kipiyle açalım ve sadece dosyanın sonuna write() ile ekleme yapalım.
1 2 |
with open("bilgiler.txt","a",encoding = "utf-8") as file: file.write("Mert Erarslan\n") # "append" metoduyla açılan bir dosyanın imleci direk dosyanın sonunda olduğu için sadece write |
1 2 3 4 5 6 7 8 9 10 11 12 |
with open("bilgiler.txt","r",encoding = "utf-8") as file: print(file.read()) """ Çıktı Mustafa Murat Coşkun Oğuz Artıran Serhat Say Mehmet Gençol Mert Erarslan """ |
Dosyanın Başında Değişiklik Yapmak
“bilgiler.txt” dosyamızın başına bir tane satır eklemek için ne yapabiliriz ? Bunun için dosyamızı bütünüyle string halinde alıp daha sonra satırımızı string’in başına eklememiz gerekiyor. Daha sonra dosyanın en başına seek() fonksiyonuyla giderek ,direk write() fonksiyonunu kullanabiliriz. Hemen yapalım.