2.27. Okuma ve yazma¶
Dosyalar diskte yaşar; Python onlara, altta yatan baytları okuyan ve yazan yöntemlere sahip bir dosya nesnesi döndüren open() aracılığıyla ulaşır.
2.27.1. open ve modlar¶
İlk argüman yoldur; ikincisi mod‘dur – Python’a dosyanın nasıl kullanılacağını söyleyen kısa bir dize:
"r"– okuma (varsayılan). Var olan bir dosyayı okumak için açar."w"– yazma. Yeni bir dosya oluşturur veya var olan birini boş olacak şekilde kırpar."a"– ekleme. Bir dosyayı, kırpmadan sonuna yazmak için açar.Yukarıdakilerden herhangi birine eklenen
"b"("rb","wb","ab") – ikili mod. Dosyanın içeriğistryerinebytesolur.
f = open("notes.txt", "r")
text = f.read()
f.close()
2.27.2. Bir bağlam yöneticisi kullanın¶
Yukarıdaki desen, open() ile close arasındaki herhangi bir şey yükseltirse dosya tutamacını sızdırır. Düzeltme, with ifadesidir (bkz. bağlam yöneticileri):
with open("notes.txt") as f:
text = f.read()
# f is closed here, even if read() failed
Bu standart biçimdir – her seferinde bu şekilde yazın.
2.27.3. Okuma¶
Dosya nesneleri birkaç okuma stilini destekler:
io.IOBase.read()– tüm dosyayı (veya N bayt) okur ve onu tek bir dize (veya bytes nesnesi) olarak döndürür.io.IOBase.readline()– sondaki"\n"dahil olmak üzere bir satır okur.Dosyayı doğrudan yinelemek, satırları teker teker verir ve bu, tüm dosyayı bir kerede okumaktan çok daha az bellek kullanımı sağlar.
with open("log.txt") as f:
for line in f:
print(line.rstrip())
str.rstrip(), çıktının çift satır aralıklı olmaması için yazdırmadan önce sondaki yeni satırı kaldırır.
2.27.4. Yazma¶
Dosyayı "w" modunda açın ve io.IOBase.write() kullanın:
with open("out.txt", "w") as f:
f.write("hello\n")
f.write("world\n")
io.IOBase.write() bir yeni satır eklemez – ona verdiğiniz tam baytları (veya metin modunda karakterleri) yazar.
2.27.5. Metin ve ikili¶
Metin modu (varsayılan, "b" olmadan "r" / "w"), gelen baytları varsayılan bir kodlama kullanarak str‘ye çözer ve giden str‘yi tekrar baytlara kodlar. Onu yapılandırma, günlükler, JSON – metin olan her şey için kullanın.
İkili mod ("rb" / "wb"), kod çözme adımını atlar ve bytes döndürür. Onu görüntüler, struct ile paketlenmiş kayıtlar, ağ yakalamaları – her baytın önemli olduğu ve dosyanın insan tarafından okunamadığı her şey için kullanın.
2.27.6. Dosyaları listeleme ve kaldırma¶
os modülü, dosya nesnesinin kendisinde bulunmayan dosya sistemi işlemlerini açığa çıkarır:
os.listdir()– bir dizindeki adların listesini döndürür.os.remove()– bir dosyayı siler.os.rename()– bir dosyayı yeniden adlandırır.os.stat()– dosya meta verileri (boyut, değişiklik zamanı, …).os.mkdir()– yeni bir dizin oluşturur.
import os
for name in os.listdir("/"):
print(name)
Dosya veya dizin orada olmayabileceğinde bunların etrafında OSError‘u yakalayın – bu işlem, gerçek betiklerde istisnaların ortaya çıktığı yaygın yerlerden biridir.