10 - Dosya İşlemleri
2024
open() fonksiyonu, bir dosyayı açar ve bir dosya nesnesi döndürür.open() fonksiyonu modlarımod: Dosyayı hangi modda açacağınızı belirten bir string. Yaygın olarak kullanılan modlar şunlardır:
'r': Okuma modu (varsayılan).'w': Yazma modu. Yoksa oluşturur, varsa içeriği siler.'a': Ekleme modu. Yoksa oluşturur, varsa sonuna ekler.'x': Oluşturma modu. Eğer dosya zaten varsa, FileExistsError hatası verir.'b': İkili (binary) mod. Resim vb okumak için kullanılabilir.'t': Metin (text) modu (varsayılan). Metin dosyalarını okumak veya yazmak için kullanılır.Örnekler
open() Fonksiyonu - Okuma ve Yazma ModlarıBazı durumlarda, bir dosyayı hem okumak hem de yazmak isteyebilirsiniz. Bu gibi durumlar için Python, hem okuma hem de yazma işlemlerine izin veren dosya modları sunar:
r+ (Okuma ve Yazma): Dosyayı hem okuma hem de yazma amaçlı açar. Dosya imleci dosyanın başına yerleştirilir. Önemli: Dosya varsa açılır, yoksa hata verir. Varolan dosyanın içeriği silinmez.
w+ (Yazma ve Okuma): Dosyayı hem yazma hem de okuma amaçlı açar. Önemli: Dosya varsa içeriği silinir, yoksa yeni bir dosya oluşturulur. Dosya imleci dosyanın başına yerleştirilir.
a+ (Ekleme ve Okuma): Dosyayı hem ekleme hem de okuma amaçlı açar. Dosya varsa, yazma işlemleri dosyanın sonuna eklenir ve dosya imleci dosyanın sonuna yerleştirilir. Dosya yoksa, yeni bir dosya oluşturulur.
Dikkat
r+, w+ ve a+ modlarında, okuma ve yazma işlemleri arasında dosya imlecinin konumuna dikkat etmek önemlidir. seek() metodunu kullanarak imleci istediğiniz konuma getirebilirsiniz. w+ modu, dosyanın içeriğini sildiği için dikkatli kullanılmalıdır.
encodingencoding="utf-8" parametresini kullanmak en iyi pratiktir.Windows:
C:\Users\KullaniciAdi\Belgeler\dosya.txt
Linux/macOS:
/home/kullanici/Belgeler/dosya.txt
/Users/kullanici/Belgeler/dosya.txt
Örnek:
Geçerli çalışma dizininiz /home/kullanici/projeler/ ise:
/home/kullanici/projeler/veri.txtveri.txt veya ./veri.txtos.path.join() Fonksiyonuos.path.join() fonksiyonunu kullanabiliriz.close() metodunu kullanarak yapabilirsiniz.Örnek
with ifadesi ile otomatik kapatma
with ifadesi, bir dosyayı otomatik olarak kapatmamızı sağlar.with bloğu sona erdiğinde, dosya otomatik olarak kapatılır.Örnek:
read(), readline(), readlines() fonksiyonu dosyaları okumamızı sağlar.read() Metoduread() metodu, dosyanın tamamını okur ve tek bir string olarak döndürür.Örnek: dosya.txt dosyasının içeriği:
Merhaba Dünya!
Bu bir dosya işlemleri örneğidir.
read(boyut): İsteğe bağlı olarak, boyut parametresi ile okunacak maksimum karakter sayısı belirtilebilir.Merhaba Dü
readline() Metodureadline() metodu, dosyanın bir satırını okur ve bir string olarak döndürür.readlines() Metodureadlines() metodu, dosyanın tüm satırlarını okur ve her satırı bir eleman olarak içeren bir liste döndürür.for döngüsü kullanabiliriz.write(), writelines() fonksiyonu dosyaya veri yazmanızı sağlar.write() Metoduwrite() metodu, dosyaya bir string yazar.writelines() Metoduwritelines() metodu, bir string listesi dosyaya yazar.tell() ve seek())tell() ve seek() metotlarını kullanabilirsiniz.tell() Metoduseek() Metoduoffset: Taşınacak bayt sayısı.from_what: Konumun nereden itibaren hesaplanacağını belirtir:
0: Dosyanın başlangıcından (varsayılan)1: Geçerli konumdan2: Dosyanın sonundanseek() Kullanımında Önemli Bir KuralMetin Modu ('r', 'w', 'a'): Dosyayı normal metin modunda açtığınızda, seek() metodu genellikle sadece dosyanın en başına (0) gitmek için kullanılır.
İkili Mod ('rb'): Eğer imleci “bulunduğum yerden 5 adım ileri” veya “sondan 10 adım geri” taşımak istiyorsanız, dosyayı Binary (İkili) modda açmanız gerekir.
Özetle
Metin dosyalarında sadece başa sarmak (seek(0)) güvenlidir. Dosya içinde serbestçe ileri-geri gezmek istiyorsanız dosyayı 'rb' modunda açmalısınız.
Örnek: Sondan Geriye Okuma (Binary Mod)
.txt) olarak kaydettik.Bir .json dosyasını Not Defteri ile açtığınızda göreceğiniz yapı şöyledir:
Yapı Python sözlüklerine (dict) çok benzer ancak:
.txt dosyasına sayıları bile string (yazı) olarak yazarsınız. JSON ise sayıyı sayı, listeyi liste, bool değerini (True/False) olduğu gibi saklar.json ModülüJSON işlemleri için Python’da dahili olarak gelen json kütüphanesini kullanırız.
Temel iki fonksiyon vardır:
json.dump(): Python verisini (Sözlük, Liste) JSON formatına çevirip dosyaya yazar.json.load(): JSON dosyasını okuyup tekrar Python verisine (Sözlük, Liste) çevirir.import json
# Saklanacak veri (Sözlük/Dictionary)
kullanici = {
"kullanici_adi": "yazilimci_kiz",
"seviye": 5,
"abonelik_aktif": True,
"ilgi_alanlari": ["Python", "Yapay Zeka", "Web"]
}
# 'w' modunda açıyoruz. Encoding utf-8 ÖNEMLİDİR.
with open("ayarlar.json", "w", encoding="utf-8") as dosya:
# ensure_ascii=False: Türkçe karakterlerin düzgün görünmesini sağlar
# indent=4: Dosyanın girintili ve okunaklı yazılmasını sağlar
json.dump(kullanici, dosya, ensure_ascii=False, indent=4)
print("Veriler ayarlar.json dosyasına kaydedildi.")Yukarıdaki kod çalıştırıldığında ayarlar.json dosyası şu şekilde görünür:
Kaydettiğimiz dosyayı okuyup tekrar Python değişkeni olarak kullanalım.
import json
with open("ayarlar.json", "r", encoding="utf-8") as dosya:
veri = json.load(dosya) # Dosyayı oku ve Python sözlüğüne çevir
# Artık 'veri' değişkeni normal bir Python sözlüğüdür
print(f"Kullanıcı: {veri['kullanici_adi']}")
print(f"İlgi Alanları: {veri['ilgi_alanlari']}")
print(f"Veri Tipi: {type(veri)}") # <class 'dict'>Soru 1: Bir dosyayı okuyarak satır sayısını ekrana yazdıran kodu yazınız.
Cevap
Soru 2: Bir dosyayı okuyup satırları alfabetik sıralayan ve “ordered_lines.txt” ye geri yazan kodu yazın.
Cevap
# Dosyayı aç ve satırları oku
with open('okubeni.txt', 'r', encoding='utf-8') as file:
satirlar = file.readlines()
# Satırları alfabetik olarak sırala
sirali_satirlar = sorted(satirlar)
# Sıralanmış satırları yeni bir dosyaya yaz
with open('ordered_lines.txt', 'w', encoding='utf-8') as output_file:
output_file.writelines(sirali_satirlar)
print("Satırlar sıralandı ve 'ordered_lines.txt' dosyasına yazıldı.")Soru 3: Bir dosyayı okuyup farklı bir dosyaya tersten yazdıran kodu yazın.
Cevap
Soru 4: Bir dosyayı okuyup en çok kelime barındıran satırı bulan ve bu satırı ve bu satırın kaç kelimeden oluştuğunu ekrana yazdıran kodu yazınız.
Cevap
# Dosyayı aç ve oku
with open('okubeni.txt', 'r', encoding='utf-8') as file:
satirlar = file.readlines()
en_uzun_satir = ''
max_kelime_sayisi = 0
for satir in satirlar:
kelimeler = satir.split() # Satırı kelimelere ayır
kelime_sayisi = len(kelimeler)
if kelime_sayisi > max_kelime_sayisi:
max_kelime_sayisi = kelime_sayisi
en_uzun_satir = satir
print(f"En uzun satır: {en_uzun_satir.strip()}")
print(f"Bu satır {max_kelime_sayisi} kelimeden oluşuyor.")Soru 5: Bir dizindeki txt dosyalarının adlarını bir başka dosyaya yazan kodu yazınız
Cevap
import os
directory = './' # Dizin yolu
output_file = 'dosya_isimleri.txt'
txt_dosyalari = []
for filename in os.listdir(directory):
if filename.endswith('.txt'):
txt_dosyalari.append(filename)
with open(output_file, 'w', encoding='utf-8') as output:
for dosya_adi in txt_dosyalari:
output.write(dosya_adi + '\n')
print(f"Tüm .txt dosya adları '{output_file}' dosyasına yazıldı.")