Bilgisayar Programlamasına ve Veri Analizine Giriş - VII Sabancı Üniversitesi Lise Yaz Okulu 2017 8. ders
Sabancı Üniversitesi Lise Yaz Okulu Modül 7 için Planımız Verileri kalıcı olarak nasıl saklarız? Sabit diskten nasıl okur ve yazarız? Dosya kavramı Dosya açmak ve kapamak 27.12.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu Dosya (File) Verilerimizi sabit diskte dosyalar halinde saklarız. Dosyaya erişmek için önce dosyayı açmamız gerekir Dosyayı okumak ya da yazmak amacıyla farklı “mod”larda açarız. Okuma modu, yazma modu, vs. Kullanılış şekli: open("file_name", " mode_name") " mode_name" ile dosyayı ne amaçla açtığımız belirtiriz; örneğin okumak yada yazmak, her ikisi de gibi. 27.12.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu Dosya Açma dosyam = open("dosya_ismi.uzantısı", "w") "w" modu dosyayı bir şey yazmak için açtığımızı belirtir. Dosyaları açarken program içinde o dosyaya erişmek için bir dosya değişkeni (ing. file handler) kullanırız Yukarıdaki dosyam bu tip bir dosya değişkeni Dosya uzantısı için şimdilik ".txt" yazalım. Bu text/metin dosyası yazdığımızı belirtir ama içerik uzantıdan da bağımsızdır (yani uzantıyı .txt yapmak gibi bir kural yok). Text dosyalarının içeriğini birden fazla satıra yayılan karakter dizisi olarak düşünebiliriz. Dosya ismini yazarken dikkat "C:\python27\ornek_programlar\ornek1.txt" yanlış "C:\\python\\ornek_programlar\\ornek1.txt" doğru 27.12.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu Dosya Açma Yol (path) belirtmezsek, dosya programın olduğu dizinde açılır dosya1 = open("ornek1.txt", "w") Başka bir dizinde açmak istiyorsak, o zaman tam path tanımlamamız gerekiyor dosya1 = open("D:\\Python27\\programs\\ornek1.txt", "w") Mac OS X’te \\ yerine // veya sadece / kullanılır 27.12.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu Dosyaya Yazma Burada izleyeceğiniz adımlar şu şekilde yazılabilir: Dosyanızı açın (yazma modunda) Örnek: dosya1 = open("ornek1.txt", "w") write() fonksiyonu ile dosyanıza veri yazabilirsiniz/ekleyebilirsiniz Örnek: dosya1.write("Sabanci Universitesi") Dosya ile işiniz bittiğinde dosyayı close() fonksiyonu ile kapatın Örnek: dosya1.close() 27.12.2018 Sabancı Üniversitesi Lise Yaz Okulu
Uyarılar ve Dosya Açma Modlar Dosyanızla işiniz bittiği zaman mutlaka kapatın Yoksa yazdığınız şeyler gidebilir. Dikkat: Eğer dosyanızın içinde veri varsa, "w" modunda açarsanız içindekiler silinir Farklı dosya açma modları: Okumak için "r" Hem okumak hem de yazmak için "r+" Veri eklemek için "a" 27.12.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu Örnek 1 dosya1 = open("ornek1.txt", "w") dosya1.write("Sabanci Universitesi") dosya1.close() dosya1 = open("ornek1.txt", "a") Dosyanın içi Sabanci UniversitesiSabanci Universitesi 27.12.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu Örnek 2 dosya1 = open("ornek1.txt", "w") dosya1.write("Sabanci Universitesi") dosya1.close() dosya1 = open("ornek1.txt", "a") dosya1.write("\nSabanci Universitesi") Dosyanın içi Sabanci Universitesi 27.12.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu Örnek 3 dosya1 = open("ornek2.txt", "w") dosya1.write("Sabanci Universitesi") dosya1.close() dosya1 = open("ornek2.txt", "a") dosya1.write("\tSabanci Universitesi") Dosyanın içi Sabanci Universitesi Sabanci Universitesi 27.12.2018 Sabancı Üniversitesi Lise Yaz Okulu
Dosyanın İçeriğini Okumak Bunun için read() fonksiyonu kullanılır Dosyanın içi tek bir string değişkeni olarak okunur ve saklanır Ama yine önce dosyayı açmak gerekir Örnek: Önceki ornek1.txt dosyasını açalım dosya1 = open("ornek1.txt", "r") dosyanin_ici = dosya1.read() print dosyanin_ici dosya1.close() >>> Sabanci Universitesi 27.12.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu Küçük Ödev Çalıştığınız klasörde "arkadaslar.txt" adında bir dosya açın. Dosyanın içerisine her satıra bir arkadaşınızın adı soyadı, doğum tarihi, doğum yeri vb. kimlik bilgilerini yazın Kişinin kimlik bilgilerinin arasına "tab" karakteri koyun \t Dosyayı saklayın Dosyayı açın Bu kimlik bilgilerini okuyun ve ekrana bastırın Melis Yildiz 20.10.2001 Izmir Uygar Dogan 18.08.2000 Istanbul Deniz Buldan 02.08.2000 Ankara Selin Temiz 13.03.2002 Gaziantep İPUÇLARI: dosya1 = open("ornek1.txt", "w") dosya1.write("Sabanci\tUniversitesi") dosya1 = open("ornek1.txt", "r") dosyanin_ici = dosya1.read() dosya1.close() 27.12.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu Küçük Ödevin Devamı Aynı ödev ama eklemeler ve bazı değişiklikler var "arkadaslar.txt" dosyasının önceden yaratılmış olduğunu kabul edelim Kullanıcıya üç seçenekli bir menü sunun: "0": programdan çıkış "1": yeni kayıt ekle (ad, soyad, doğum tarihi ve doğum yerin bilgilerini kullanıcıdan isteyin ve dosyaya girin) "2": olan kayıtları oku (Bos dosya ise "Bos dosya" yazdır) Kullanıcı programdan çıkmadıkça, menü tekrar verilsin İPUÇLARI: dosya1 = open("ornek1.txt", "w") dosya1.write("Sabanci\tUniversitesi") dosya1 = open("ornek1.txt", "r") dosya1 = open("ornek1.txt", "a") dosyanin_ici = dosya1.read() dosya1.close() 27.12.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu Ya O Dosya Yoksa Bir dosyayı "w" modunda açarsanız, dosya var mı yok mu demeden dosya açılır Dosya önceden varsa, yazarken eski yazılanlar silinir Dosya yoksa boş olarak açılır Bir dosyayı "a" modunda açarsanız: Eğer dosya yoksa boş olarak açılır Eğer dosya önceden varsa, eski yazılanlar silinmeden açılır ve yeni yazılacak olanlar sonuna eklenir. Bir dosyayı "r" modunda açmaya kalktığınız olmayan dosyayı açmak hata verir. Bu hatayı engellemek için dosyayı açmadan önce aşağıdaki kontrolü yaparız if os.path.exists(dosya_ismi) == True: Bunun için önce, programın başına import os dememiz gerekir 27.12.2018 Sabancı Üniversitesi Lise Yaz Okulu
Bu Artık Küçük Bir Ödev Değil Aynı ödev Önceden yaratılmış bir dosya olmasa da çalışsın Kimlik bilgilerini kullanıcıdan isteyin Kullanıcıya aynı üç seçeneği verin Dosya ismini kullanıcı girsin Dosya açılmadan önce dosyanın olup olmadığı kontrol edilsin; dosya yoksa Okuma yapmak istiyorsak, "Böyle bir dosya yok" desin Yeni kayıt girmek istiyorsak ama dosya yoksa, "Yeni bir dosya acıyorum" desin ve kaydı alsın Yeni kayıt girmek istiyorsak ve dosya varsa, "Var olan dosyaya ekliyorum" desin ve eklesin. 27.12.2018 Sabancı Üniversitesi Lise Yaz Okulu
Farklı Dosya Okuma Şekilleri Yeni bir fonksiyon: readline() Bununla dosyanın bir satırını okuruz string değişkeni içine Örnek: kayitlar.txt dosyasının içeriği şu şekilde Didier Drogba 01.05.1891 Istanbul Mazhar Alanson 05.06.1950 Trabzon Donald Trump 04.08.1940 NYC Angela Merkel 01.02.1770 Almanya 27.12.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu readline() Didier Droba 01.05.1891 Istanbul Mazhar Alanson 05.06.1950 Trabzon Donald Trump 04.08.1940 NYC Angela Merkel 01.02.1770 Almanya kayit_dosyasi = open("kayitlar.txt", "r") kayit = kayit_dosyasi.readline() print kayit kayit_dosyasi.close() >>> Didier Drogba 01.05.1891 Istanbul 27.12.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu readline() Didier Droba 01.05.1891 Istanbul Mazhar Alanson 05.06.1950 Trabzon Donald Trump 04.08.1940 NYC Angela Merkel 01.02.1770 Almanya kayit_dosyasi = open("kayitlar.txt", "r") kayit = kayit_dosyasi.readline() print kayit kayit_dosyasi.close() >>> Didier Drogba 01.05.1891 Istanbul Mazhar Alanson 05.06.1950 Trabzon 27.12.2018 Sabancı Üniversitesi Lise Yaz Okulu
Tüm Satırları Birden Okumak kayit_dosyasi = open("kayitlar.txt", "r") for satir in kayit_dosyasi: print satir >>> Didier Drogba 01.05.1891 Istanbul Mazhar Alanson 05.06.1950 Trabzon Donald Trump 04.08.1940 NYC Angela Merkel 01.02.1770 Almanya 27.12.2018 Sabancı Üniversitesi Lise Yaz Okulu
readlines() fonksiyonu Açılan dosyaların satırlarını bir listeye ekler Listenin her bir elemanı bir string'dir Örnek: dosya1 = open("kayitlar.txt", "r") tum_satirlar = dosya1.readlines() print tum_satirlar >>> ['Didier Drogba\t01.05.1891\tIstanbul\n', 'Mazhar Alanson\t05.06.1950\tTrabzon\n', 'Donald Trump\t04.08.1940\tNYC\n', 'Angela Merkel\t01.02.1770\tAlmanya\n'] 27.12.2018 Sabancı Üniversitesi Lise Yaz Okulu
readlines() fonksiyonu len fonksiyonu ile kaç tane kayıt olduğunu bulabiliriz. dosya1 = open("kayitlar.txt", "r") kayitlar = dosya1.readlines() print len(kayitlar) >>> 4 27.12.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu Ödev Elimizde içeriği şu şekilde olan bir dosya var (her satırda önce bir veya birden fazla kelime şeklinde isim/soyad ve en sonda yaş). Delal Abdullatif Abzak 38 Fatma Ozlem Acar 25 Ozde Acarkan 37 Atahan Adanir 69 … Bu dosya içerisinde Kaç kişi olduğunu Yaşlarının toplamını Yaşların ortalamasını En genç kişinin kaç yaşında olduğunu En yaşlı kişinin kaç yaşında olduğunu bulan ve ekrana yazan bir program yazın. Önce dosyanın adını klavyeden okusun. Eğer dosya yok ise, dosyanın bulunamadığını yazsın. Eğer dosya boş ise (dosya var ama içinde hiçbir kayıt yok ise), ortalama yaş, en genç yaş, ve en yaşlı yaş bilgilerini yazmasın ama yaşların toplamını ve kaç kişi olduğunu 0 olarak göstersin. 27.12.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu Ödev (örnek çıktılar) Dosya yoksa Dosyanin adini girin: kisiliksizler.txt kisiliksizler.txt isimli dosya bulunamadı Dosya var ama içi boşsa Dosyanin adini girin: boskisiler.txt Toplam yas = 0 Kisi sayisi = 0 Dosya var ve içinde bilgi varsa (dosya içeriğinin beklenildiği formatta, yani her bir satırda boşluklar ile ayrılmış şekilde bir kişiye ait isim ve yaş bilgisinin olduğunu varsayabilirsiniz) Dosyanin adini girin: kisiler.txt Toplam yas = 51333 Kisi sayisi = 955 Ortalama yas = 53.7518324607 En genc kisi 21 yasinda En yasli kisi 87 yasinda Web sayfasında kisiler.txt ve boskisiler.txt dosyalarını bulabilirsiniz 27.12.2018 Sabancı Üniversitesi Lise Yaz Okulu