Python’da bir dosyayı açmak için dosya adını belirtmek yeterlidir;
dosya = open("dosyam.txt")
Şimdi örneklerimizde kullanmak üzere bir metin dosyası oluşturalım ve içine bir miktar yazı ekleyelim. Ben örnek olması bakımından dosyam.txt isimli bir dosya oluşturdum ve içine Stephen King’in “O” adlı romanını tanıtan kısa bir metin ekledim.
Öğrendiğimiz ilk fonksiyon ile Python kodumuz içinde dosyamızı açalım.
dosya=open("dosyam.txt")
open() fonksiyonu bir dosya nesnesi oluşturur ve sizin belirlediğiniz bir isme sahip olan değişkene depolar. İçeriğini görmek için de dosyayı okumalısınız. Bunun için read() fonksiyonu kullanılır.
dosya=open("dosyam.txt") print(dosya.read())
Çıktı:
Amerikalı roman ve hikaye yazarı Stephen King’in 1986’da yayımlanan ölümsüz eseri "O", dünya edebiyatında korku ve gerilim türünün en seçkin örnekleri arasında yer alıyor. Eser, kalın hacminin yanı sıra akıcı dili ve sürükleyici hikayesiyle okurlarını dolu dizgin bir maceraya sürüklüyor. Yazarın tamamlamak için üzerinde dört yıl boyunca çalıştığı eseri, elinize aldığınızda bir solukta okuyacaksınız. Stephen King’in başyapıtı olarak değerlendirilen "O" romanı, bini aşkın sayfasıyla okurlarına çok boyutlu bir serüvenin kapılarını aralıyor. Yazarın yedi farklı karakterin anlatımıyla kaleme aldığı eser, iki ayrı zaman dilimini kapsıyor. Böylelikle kitap, farklı kişi ve zamanların ele alındığı 14 bölümden meydana geliyor. Rafların tek ciltlik en kalın romanlarından olan "O"yu bitirdiğinizde, daha uzun yazılmış olmasını dileyeceksiniz.
Dosyanızı read() fonksiyonu ile kod içinde sadece bir kez okuyabilirsiniz. Okuduktan sonra okuyucu imleci dosyanın sonunda kalır ve açık dosyayı tekrar okumak istediğinizde boş sonuç döndürür. İmleci tekrar metnin başına taşımalısınız. Bunun için de tekrar okuma işlemi gerçekleştirmeden önce seek(0) fonksiyonuyla imleci 0 konumuna götürmeli, ondan sonra okuma işlemini gerçekleştirmelisiniz.
dosya=open("dosyam.txt") print(dosya.read()) print(dosya.read())
Kodu size boş çıktı döndürecektir. Çünkü ilk okumadan sonra okuma imleci dosyanın sonunda kalmıştır. Onu başa taşıyıp okuma işlemini tekrar gerçekleştirebilirsiniz;
dosya=open("dosyam.txt") print(dosya.read()) dosya.seek(0) print(dosya.read())
Eğer metnin belirli bir sayıdaki karakterini okumak isterseniz;
dosya.read(5)
şeklinde kullanabilirsiniz. Bu örneğimiz de dosyanın ilk 5 karakteri okunuyor.
Ya da çok satırlı bir dokümanınız var ise satır satır okumak için readline() fonksiyonunu kullanabilirsiniz;
dosya.readline()
Birden çok satırı okumak için aynı komutu ardarda vermeniz gerekir. Ya da bir döngü içinde kullanabilirsiniz;
x=0 while x<6: print(dosya.readline()) x += 1
Çıktı:
Amerikalı roman ve hikaye yazarı Stephen King’in 1986’da yayımlanan ölümsüz eseri "O", dünya edebiyatında korku ve gerilim türünün en seçkin örnekleri arasında yer alıyor. Eser, kalın hacminin yanı sıra akıcı dili ve sürükleyici hikayesiyle okurlarını dolu dizgin bir maceraya sürüklüyor. Yazarın tamamlamak için üzerinde dört yıl boyunca çalıştığı eseri, elinize aldığınızda bir solukta okuyacaksınız. Stephen King’in başyapıtı olarak değerlendirilen "O" romanı, bini aşkın sayfasıyla okurlarına çok boyutlu bir serüvenin kapılarını aralıyor. Yazarın yedi farklı karakterin anlatımıyla kaleme aldığı eser, iki ayrı zaman dilimini kapsıyor. Böylelikle kitap, farklı kişi ve zamanların ele alındığı 14 bölümden meydana geliyor. Rafların tek ciltlik en kalın romanlarından olan "O"yu bitirdiğinizde, daha uzun yazılmış olmasını dileyeceksiniz. Derry’nin Alt Koridorlarında Korkularınızla Yüzleşmeye Hazır Olun!
Üzerinde çalıştığınız dosya ile ilgili işleminizi tamamladıktan sonra dosyayı close() fonksiyonu ile kapatmayı unutmayın. Bu önemli bir konudur. Zira, bir dosya açıldığında sistem kaynaklarının bir kısmı bu dosyaya ayrılır. Sizin uygulamanız ile işletim sistemi birbirinden bağımsızdır. Dolayısıyla işletim sisteminin kaynaklarını kullandığınız uygulamalarınızı iyi yönetmelisiniz ki, üzerinde çalıştığınız sistem zarar görmesin. Eğer siz dosyayı kapatmayı unutursanız ya da bir hata neticesi dosya kapatılmadan açık kalırsa gereksiz sistem kaynağı israfına neden olursunuz. Bu tür hataların çoğalması da; değil uygulamanızın, sistemin dahi kilitlenmesine ya da çökmesine neden olabilir. Ayrıca önbellek teknolojisi nedeniyle bazı durumlarda dosyalardaki değişiklikler kapatılmadıkları durumlarda görüntülenemezler.
dosya.close()
Eğer dosyayı kapatmayı unutmayacağınızdan emin olamıyorsanız, ya da yeni bir programcıysanız ve kodlarınızda hata oluşması söz konusu ise, bu tür harici kaynakları kullanan dosyalar ile çalışma gibi işlemleriniz için size yardımcı olabilecek bir yol daha var; with…as kod blokları.
Bu kavrama Python’da Bağlam Yöneticileri(Contenxt Manager) adı verilir ve dış kaynaklı işlemlerinizi yönetmenizde size yardımcı olurlar.
Dosya açma ve üzerinde çalışma işlemlerinizi bu kod blokları içinde gerçekleştirirseniz siz dosyayı kapatmayı unutsanız da with dosyayı otomatik olarak kapatarak sorunu ortadan kaldırır.
with open("dosyam.txt") as dosya: x=0 while x<3: print(dosya.readline()) x += 1
Birden Çok Dosyayı Okumak
Python’da birden fazla dosyayı açıp içeriğini okuyabilmeniz için geliştirilmiş ayrı bir momdül bulunur; fileinput.
Bu modül aynı zamanda birden fazla kaynaktan veri girişi içeriğini açıp okumanızı da sağlar ama biz şimdilik sadece bir dosya listesindeki dosyalardan veri okuma ile ilgileniyoruz.
fileinput modülü okuyacağı dokümanları komut satırından alır. Yani fileinput ile bir uygulama oluşturmanıza izin verir ve bu uygulamayı terminalde çalıştırıp parametre olarak okuyacağı dokümanları verirsiniz. Bunun için sys modülüne de ihtiyaç duyar. sys modülü sayesinde Python içinde komut terminalinin global değişkenlerine ulaşabilirsiniz.
Bu seviyede oldukça karmaşık görünebilir, ancak bir örnekle açıklayıp esasında basit bir işlem olduğunu gösterelim. Öncelikle bir çalışma klasörü içinde 2 metin dosyası oluşturalım ve içlerine başlık ile birlikte bir paragraf yazı ekleyelim. Sonra bir coklu-dosya-okuma.py isimli python dosyası oluşturalım ve içine kodlarımızı ekleyelim;
import sys, fileinput dosyalar=fileinput.input() for satirlar in dosyalar: print(satirlar) print("") fileinput.close()
Ya da aynı kodu with..as bağlam yöneticisi ile yazacak olursak;
import sys, fileinput with fileinput.input() as dosyalar: for satirlar in dosyalar: print(satirlar) print("")
Şimdi yapmamız gereken işletim sistemimizin terminalini açıp python uygulamamızı parametre olarak dosyalarımızın isimlerini vererek çalıştırmak;
$ python3 coklu-dosya-okuma.py blues\ in\ D\ minor.txt modal\ origins.txt
Çıktı:
Blues in D Minor, Key of F What is a Tonal Center? A Tonal Center is a modal tone within a Key Position that serves as a fixed reference point for the Ear. A modal tone functioning as a Tonal Center is like a “Home base” so to speak, From the Tonal Center, the ear hears its way out to all the of the other tones in the Key Position. The Tonal Center plus one of the other tones in the Key played together in Classical Theory terminology is called an Interval. The Modal Origins of Chords Chords get their modal names from the modal tone they’re built upon. This is called the “Root” of the Chord. An Ionian Chord has the Ionian Tone of the Key as its Root.
Gördüğünüz gibi çıktımız ilk paragrafı birinci dosyamızdan ikinci paragrafı ise ikinci dosyamızdan almış oldu. Bu yöntemle birden fazla dosyanın içeriğini tek dosyaya yazdırmak ile ilgili bir uygulama da geliştirebilirsiniz. Hatta, uygulamanızın ikinci versiyonunu metin fonksiyonları ile daha da geliştirip dosyaların sadece belirli bölümlerini alarak yeni bir dosya oluşturma işlemini yapacak hale getirebilirsiniz.
Seçenekler sınırsız. Yeni şeyler öğrendikçe vizyonunuzun da, ufkunuzun da yeni fikirler ile geliştiğinin farkına varacaksınız.
Bağlantıda Kalalım