Biz bu bölümde, dosya girdi/çıktısı konusuna ilişkin bildiklerimizi bir adım öteye götüreceğiz ve gerçek anlamda dosyaları nasıl manipüle edeceğimizi öğreneceğiz.
Python programlama dilinde dosyalarla uğraşırken bütün dosya işlemleri için temel olarak tek bir fonksiyondan yararlanacağız. Bu fonksiyonu siz zaten tanıyorsunuz. Fonksiyonumuzun adı open()
.
Dosya Oluşturmak
Dediğimiz gibi, Python programlama dilinde dosya işlemleri için open()
adlı bir fonksiyondan yararlanacağız. İşte dosya oluşturmak için de bu fonksiyonu kullanacağız.
Önceki derslerimizde verdiğimiz örneklerden de bildiğiniz gibi, open()
fonksiyonunu temel olarak şöyle kullanıyoruz:
f = open(dosya_adı, kip)
open()
fonksiyonu dosya_adı ve kip dışında başka parametreler de alır.
Mesela “tahsilat.txt” adlı bir dosyayı yazma kipinde açmak için şöyle bir komut kullanıyoruz:
tahsilat_dosyası = open("tahsilat_dosyası.txt", "w")
Burada ‘tahsilat_dosyası.txt’ ifadesi dosyamızın adını belirtiyor. “w” harfi ise bu dosyanın yazma kipinde açıldığını söylüyor.
Yukarıdaki komutu çalıştırdığınızda, o anda hangi dizin altında bulunuyorsanız o dizin içinde tahsilat_dosyası.txt adlı boş bir dosyanın oluştuğunu göreceksiniz.
Bu arada, dosya adını yazarken, dosya adı ile birlikte o dosyanın hangi dizin altında oluşturulacağını da belirleyebilirsiniz. Örneğin:
dosya = open("/dosyayı/oluşturmak/istediğimiz/dizin/dosya_adı", "w")
Ayrıca dosyayı barındıran dizin adlarını yazarken, dizinleri ayırmak için ters taksim (\) yerine düz taksim (/) kullanmaya dikkat edin.
Aksi halde, dizin adı oluşturmaya çalışırken yanlışlıkla kaçış dizileri oluşturabilirsiniz.
Böylece Python programlama dilinde boş bir dosyanın nasıl oluşturulacağını öğrenmiş olduk. O halde gelin isterseniz şimdi bu dosyanın içini nasıl dolduracağımızı öğrenelim.
Dosyaya Yazmak
Python programlama dilinde, open()
fonksiyonu ile yazma kipinde açtığımız bir dosyaya bir veri yazabilmek için dosyaların write()
adlı metodundan yararlanacağız.
dosya.write(yazılacak_şeyler)
Gelin bu formülü somutlaştıracak bir örnek verelim. Mesela yukarıda oluşturduğumuz tahsilat dosyasının içine bazı veriler girelim.
Önce dosyamızı nasıl oluşturacağımızı hatırlayalım:
ths = open("tahsilat_dosyası.txt", "w")
Şimdi de bu dosyaya şu bilgileri girelim:
ths.write("Halil Pazarlama: 120.000 TL")
Yani programımız şöyle görünsün:
ths = open("tahsilat_dosyası.txt", "w")
ths.write("Halil Pazarlama: 120.000 TL")
Bu komutları verdiğinizde, tahsilat_dosyası.txt adlı dosyanın içine şu bilgilerin işlendiğini göreceksiniz:
Halil Pazarlama: 120.000 TL
Eğer dosyayı açtığınızda bu bilgi yerine hâlâ boş bir dosya görüyorsanız, sebebi tamponda tutulan verilerin henüz dosyaya işlenmemiş olmasıdır.
Bu konuyu print()
fonksiyonunun flush adlı parametresini incelerken öğrendiğimizi hatırlıyor olmalısınız.
Eğer durum böyleyse, dosyanızı kapatmanız gerekiyor. Bunu close()
adlı başka bir metotla yapabildiğimizi biliyorsunuz:
ths.close()
Açtığımız dosyaların tamamını programın işleyişi sona erdiğinde kapatmayı unutmuyoruz. Yani yukarıdaki programı tam olarak şöyle yazıyoruz:
ths = open("tahsilat_dosyası.txt", "w")
ths.write("Halil Pazarlama: 120.000 TL"),
ths.close()
Bu kodlarda sırasıyla şu işlemleri gerçekleştirdik:
- tahsilat_dosyası adlı bir dosyayı yazma kipinde açarak, bu adda bir dosya oluşturulmasını sağladık,
write()
metodunu kullanarak bu dosyaya bazı bilgiler girdik,- Dosyamıza yazdığımız bilgilerin dosyaya işlendiğinden emin olmak ve işletim sisteminin dosyanın açılması ve dosyaya veri işlenmesi için devreye soktuğu bütün kaynakları serbest bırakmak için
close()
metoduyla programımızı kapattık.
Python’da bir dosyayı “w” kipinde açtığımızda, eğer o adda bir dosya ilgili dizin içinde zaten varsa, Python bu dosyayı sorgusuz sualsiz silip, yerine aynı adda başka bir boş dosya oluşturacaktır.
Böylece bir dosyanın nasıl oluşturulacağını, nasıl açılacağını ve içine birtakım bilgilerin nasıl girileceğini kabataslak da olsa öğrenmiş olduk.
Dosya Okumak
Bildiğiniz gibi, bir dosyayı yazma kipinde açmak için “w” harfini kullanıyoruz. Bir dosyayı okuma kipinde açmak için ise “r” harfini kullanacağız.
Mesela, bilgisayarımızda var olan fihrist.txt adlı dosyayı okumak üzere açalım:
fihrist = open("fihrist.txt", "r")
Eğer bir dosyayı okuma kipinde açacaksanız, bu “r” harfini hiç belirtmeseniz de olur. Yani şu komut bilgisayarımızdaki fihrist.txt adlı dosyayı okuma kipinde açacaktır:
fihrist = open("fihrist.txt")
“r” kipiyle açtığımız bir dosyayı okumak için ise read()
, readline()
ve readlines()
adlı üç farklı metottan yararlanacağız.
Bu metotların üçü de dosya okumaya yarasa da, verdikleri çıktılar birbirinden farklıdır. O yüzden farklı amaçlar için farklı metodu kullanmanız gereken durumlarla karşılaşabilirsiniz.
Öncelikle içeriği şu olan, fihrist.txt adlı bir dosyamızın olduğunu varsayalım:
Ahmet Özbudak : 0533 123 23 34
Mehmet Sülün : 0532 212 22 22
Sami Sam : 0542 333 34 34
Şimdi bir dosya açıp şu kodları yazalım:
fihrist = open("fihrist.txt")
print(fihrist.read())
Bu kodları çalıştırdığımızda, eğer kullandığınız işletim sistemi GNU/Linux ise muhtemelen şu çıktıyı elde edeceksiniz:
Ahmet Özbudak : 0533 123 23 34
Mehmet Sülün : 0532 212 22 22
Sami Sam : 0542 333 34 34
Ama eğer bu kodları Windows’ta çalıştırdıysanız Türkçe karakterler bozuk çıkmış olabilir.
Yukarıda elde ettiğimiz şey bir karakter dizisidir bunu şu şekilde teyit edebileceğinizi biliyorsunuz:
fihrist = open("fihrist.txt")
print(type(fihrist.read()))
Gördüğünüz gibi, read()
metodu bize, dosyanın bütün içeriğini bir karakter dizisi olarak veriyor. Bir de şuna bakalım:
fihrist = open("fihrist.txt")
print(fihrist.readline())
Burada da readline()
metodunu kullandık. Bu kodlar bize şöyle bir çıktı veriyor:
Ahmet Özbudak : 0533 123 23 34
read()
metodu bize dosya içeriğinin tamamını veriyordu. Gördüğünüz gibi readline()
metodu tek bir satır veriyor. Yani bu metot yardımıyla dosyaları satır satır okuyabiliyoruz.
Bu metodun etkileşimli kabuk üzerinden de çalıştırabilirsiniz:
>>> fihrist = open("fihrist.txt", "r")
>>> print(fihrist.readline())
Ahmet Özbudak : 0533 123 23 34
>>> print(fihrist.readline())
Mehmet Sülün : 0532 212 22 22
>>> print(fihrist.readline())
Sami Sam : 0542 333 34 34
Gördüğünüz gibi, readline()
metodu gerçekten de dosyayı satır satır okuyor.
Bir de readlines()
metodunun ne yaptığına bakalım…
Şu kodları yazalım:
fihrist = open("fihrist.txt")
print(fihrist.readlines())
Bu kodları yazdığımızda şuna benzer bir çıktı alacağız:
['Ahmet Özbudak : 0533 123 23 34\n', 'Mehmet Sülün : 0532 212 22 22\n',
'Sami Sam : 0542 333 34 34']
Gördüğünüz gibi, bu defa karakter dizisi yerine bir liste ile karşılaşıyoruz. Demek ki read()
ve readline()
metotları çıktı olarak bize bir karakter dizisi verirken, readlines()
metodu liste veriyormuş.
Dosyaları Otomatik Kapatma
Daha önce de söylediğimiz gibi, bir dosyayı açıp bu dosya üzerinde gerekli işlemleri yaptıktan sonra bu dosyayı açık bırakmamak büyük önem taşır.
Örneğin açtığınız dosyayı kapatmayı unutmuş olabilirsiniz. Bunun dışında, programınızdaki bir hata da dosyaların kapanmasını engelleyebilir.
Bu tür durumlara karşı iki seçeneğiniz var:
try... except... finally...
bloklarından yararlanmakwith
adlı bir deyimi kullanmak
Birinci yöntemden daha önce de bahsettiğimizi hatırlıyorsunuz. Hata yakalama bölümünü anlatırken bununla ilgili şöyle bir örnek vermiştik:
try:
dosya = open("dosyaadı", "r")
...burada dosyayla bazı işlemler yapıyoruz...
...ve ansızın bir hata oluşuyor...
except IOError:
print("bir hata oluştu!")
finally:
dosya.close()
Bu yöntem gayet uygun ve iyi bir yöntemdir. Ancak Python bize bu tür durumlar için çok daha pratik bir yöntem sunar. Dikkatlice bakın:
with open("dosyaadı", "r") as dosya:
print(dosya.read())
Dosyalarımızı bu şekilde açıp üzerlerinde işlemlerimizi yaptığımızda Python dosyayı bizim için kendisi kapatacaktır. Bu şekilde bizim ayrıca bir close()
satırı yazmamıza gerek yok.
with
deyimini kullanmamız sayesinde, dosya açıldıktan sonra arada bir hata oluşsa bile Python dosyayı sağsalim kapatıp sistem kaynaklarının israf edilmesini önleyecektir.
Dosyayı İleri-Geri Sarmak
Dosyayı tamamen okuduktan sonra tekrar başa dönmek istersek ne yapacağız? Bir dosya tamamen okunduktan sonra tekrar başa dönmek için dosyaların seek()
adlı bir metodundan yararlanacağız.
Mesela şu örneklere bakalım.
>>> f = open("python.txt")
>>> f.read()
'Bu programlama dili Guido Van Rossum adlı Hollandalı bir
programcı\ntarafından 90’lı yılların başında geliştirilmeye başlanmıştır.
Çoğu insan,\nisminin Python olmasına aldanarak, bu programlama dilinin,
adını piton\nyılanından aldığını düşünür. Ancak zannedildiğinin aksine bu
programlama dilinin\nadı piton yılanından gelmez. Guido Van Rossum bu
programlama dilini, The Monty\nPython adlı bir İngiliz komedi grubunun,
Monty Python’s Flying Circus adlı\ngösterisinden esinlenerek adlandırmıştır.
Ancak her ne kadar gerçek böyle olsa\nda, Python programlama dilinin pek çok
yerde bir yılan figürü ile temsil\nedilmesi neredeyse bir gelenek halini
almıştır.\n'
Burada open()
fonksiyonunu kullanarak python.txt adlı bir dosyayı açıp, read()
metodu yardımıyla da bu dosyanın içeriğini okuduk. Bu noktada dosyayı tekrar okumaya çalışırsak elde edeceğimiz şey boş bir karakter dizisi olacaktır:
>>> f.read()
''
İşte bu yüzden seek()
metodunu kullanacağız:
>>> f.seek(0)
Gördüğünüz gibi seek()
metodunu bir parametre ile birlikte kullandık. Bu metoda verdiğimiz parametre, dosya içinde kaçıncı bayt konumuna gideceğimizi gösteriyor.
Biz burada 0 sayısını kullanarak dosyanın ilk baytına, yani en başına dönmüş olduk. Artık dosyayı tekrar okuyabiliriz:
>>> f.read()
'Bu programlama dili Guido Van Rossum adlı Hollandalı bir
programcı\ntarafından 90’lı yılların başında geliştirilmeye başlanmıştır.
Çoğu insan,\nisminin Python olmasına aldanarak, bu programlama dilinin,
adını piton\nyılanından aldığını düşünür. Ancak zannedildiğinin aksine bu
programlama dilinin\nadı piton yılanından gelmez. Guido Van Rossum bu
programlama dilini, The Monty\nPython adlı bir İngiliz komedi grubunun,
Monty Python’s Flying Circus adlı\ngösterisinden esinlenerek adlandırmıştır.
Ancak her ne kadar gerçek böyle olsa\nda, Python programlama dilinin pek çok
yerde bir yılan figürü ile temsil\nedilmesi neredeyse bir gelenek halini
almıştır.\n'
Eğer o anda dosyanın hangi bayt konumunda bulunduğunuzu öğrenmek isterseniz de tell()
adlı başka bir metottan yararlanabilirsiniz.
>>> f.tell()
20
Bu çıktıya göre o anda dosyanın 20. baytının üzerindeyiz…
Dosyalarda Değişiklik Yapmak
Varolan ve içi halihazırda dolu bir dosyaya nasıl veri ekleneceğini bilmiyoruz. İşte şimdi bu işlemin nasıl yapılacağını tartışacağız.
Ancak burada önemli bir ayrıntıya dikkatinizi çekmek istiyorum. Dosyaların neresinde değişiklik yapmak istediğiniz büyük önem taşır.
Biz bu bölümde dosyaların baş tarafına, ortasına ve sonuna nasıl veri eklenip çıkarılacağını ayrı ayrı tartışacağız.
Dosyaların Sonunda Değişiklik Yapmak
Eğer bir dosyayı tamamen silmeden, o dosyaya ekleme yapmak veya o dosyada herhangi bir değişiklik yapmak istiyorsak, dosyamızı buraya kadar öğrendiğimiz iki kipten daha farklı bir kiple açmamız gerekiyor.
Şimdi öğreneceğimiz bu yeni kipin adı “a”. Yani Python’da içi boş olmayan bir dosyada değişiklik yapabilmek için “a” adlı bir kipten yararlanacağız:
f = open(dosya_adı, "a")
Örneğin yukarıda verdiğimiz fihrist.txt adlı dosyayı bu kipte açalım ve dosyaya yeni bir girdi ekleyelim:
with open("fihrist.txt", "a") as f:
f.write("Selin Özden\t: 0212 222 22 22")
Gördüğünüz gibi, dosyaya yeni eklediğimiz girdiler otomatik olarak dosyanın sonuna ilave ediliyor. Duruma göre yukarıdaki satırı şu şekilde yazmanız gerekebilir:
with open("fihrist.txt", "a") as f:
f.write("\nSelin Özden\t: 0212 222 22 22")
Burada bir alt satıra geçebilmek için ‘Selin’ ifadesinden önce bir satır başı karakteri eklediğimize dikkat edin.
Dosyaların Başında Değişiklik Yapmak
Dosyaların sonuna değil de, en başına ekleme yapmanız gereken durumlarla da karşılaşacaksınız. Python’da bu işi yapmak da çok kolaydır.
Ahmet Özbudak : 0533 123 23 34
Mehmet Sülün : 0532 212 22 22
Sami Sam : 0542 333 34 34
Selin Özden : 0212 222 22 22
Dosya içeriği bu. Eğer bu dosyayı “a” kipi ile açtıktan sonra doğrudan write()
metodunu kullanarak bir ekleme yaparsak, yeni değer dosyanın sonuna eklenecektir. Ama biz mesela şu veriyi:
Sedat Köz : 0322 234 45 45
‘Ahmet Özbudak : 0533 123 23 34’ girdisinin hemen üstüne, yani dosyanın sonuna değil de en başına eklemek istersek ne yapacağız?
Öncelikle şu kodları deneyelim:
with open("fihrist.txt", "r") as f:
veri = f.read()
f.seek(0) #Dosyayı başa sarıyoruz
f.write("Sedat Köz\t: 0322 234 45 45\n"+veri)
Bu kodları bir dosyaya kaydedip çalıştırdığımızda Python bize şu hatayı verecektir:
istihza@netbook:~/Desktop$ python3 deneme.py
Traceback (most recent call last):
File "deneme.py", line 4, in <module>
f.write("Sedat Köz\t: 0322 234 45 45\n"+veri)
io.UnsupportedOperation: not writable
Bu hatayı almamızın sebebi dosyayı ‘okuma’ kipinde açmış olmamız.
Peki dosyayı “w” karakteri yardımıyla yazma kipinde açarsak ne olur?
istihza@netbook:~/Desktop$ python3 deneme.py
Traceback (most recent call last):
File "deneme.py", line 2, in <module>
veri = f.read()
io.UnsupportedOperation: not readable
Gördüğünüz gibi, bu kez de dosyanın okunamadığına ilişkin bir hata alıyoruz.
Yukarıda da gördüğümüz gibi, dosyamızı “r” veya “w” kiplerinde açmak işe yaramadı. Peki ne yapacağız? Dosyamızı hem okuma hem de yazma kipinde açacağız.
with open("fihrist.txt", "r+") as f:
veri = f.read()
f.seek(0) #Dosyayı başa sarıyoruz
f.write("Sedat Köz\t: 0322 234 45 45\n"+veri)
Burada “r+” adlı yeni bir kip kullandığımıza dikkat edin. “+” işareti bir dosyayı hem okuma hem de yazma kipinde açmamıza yardımcı olur.
Yukarıdaki kodlarda ilk satırın ardından şöyle bir kod yazdık:
veri = f.read()
Böylece dosyanın bütün içeriğini veri adlı bir değişkene atamış olduk. Peki bu işlemi yapmazsak ne olur? Yani mesela şöyle bir kod yazarsak:
with open("fihrist.txt", "r+") as f:
f.seek(0)
f.write("Sedat Köz\t: 0322 234 45 45\n")
Bu şekilde ‘Sedat Köz\t: 0322 234 45 45\n’ satırı, dosyadaki ilk satırı silip onun yerine geçecektir. Eğer yapmak istediğiniz şey buysa ne âlâ. Bu kodları kullanabilirsiniz.
Bu satırın ardından gelen f.seek(0) satırının ne işe yaradığını biliyorsunuz. Böylece şu kod:
f.write("Sedat Köz\t: 0322 234 45 45\n"+veri)
Sedat Köz\t: 0322 234 45 45\n’ satırını dosyanın en başına ekliyor.
Dosyaların Ortasında Değişiklik Yapmak
Önceki sayfalarda bir dosyayı okurken üç farklı metottan yararlanabileceğimizi öğrenmiştik. Bu metotların read()
, readline()
ve readlines()
adlı metotlar olduğunu biliyorsunuz.
Bu üç metottan read()
adlı olanı bize çıktı olarak bir karakter dizisi veriyor. readline()
metodu ise dosyaları satır satır okuyor ve bize yine bir karakter dizisi veriyor.
Sonuncu metot olan readlines()
ise bize bir liste veriyor. readline()
metodundan farklı olarak readlines()
metodu dosyanın tamamını bir çırpıda okuyor.
Bu üç metot arasından, adı readlines()
olanının, bize yardımcı olabileceğini tahmin etmiş olabilirsiniz. Çünkü dediğimiz gibi readlines()
metodu bize bir dosyanın içeriğini liste halinde veriyor.
Dosyaların herhangi bir yerinde yapmak istediğimiz değişiklikleri rahatlıkla yapabiliriz.
with open("fihrist.txt", "r+") as f:
veri = f.readlines()
veri.insert(2, "Sedat Köz\t: 0322 234 45 45\n")
f.seek(0)
f.writelines(veri)
İlk olarak gözümüze çarpan şey, dosyayı “r+” kipinde açmış olmamız. Bu şekilde dosyayı hem okuma hem de yazma kipinde açmış oluyoruz.
Daha sonra şöyle bir satır yazdık:
veri = f.readlines()
Bu sayede dosyadaki bütün verileri bir liste olarak almış olduk. Bizim amacımız bu listenin 2. sırasına yeni bir satır eklemek. Bu işlemi listelerin insert()
adlı metodu yardımıyla rahatlıkla yapabiliriz:
veri.insert(2, "Sedat Köz\t: 0322 234 45 45\n")
Bu şekilde liste üzerinde istediğimiz değişiklikleri yaptıktan sonra tekrar dosyanın başına dönmemiz lazım.
Çünkü readlines()
metoduyla dosyayı bir kez tam olarak okuduktan sonra imleç o anda dosyanın en sonunda bulunuyor.
Eğer dosyanın en başına dönmeden herhangi bir yazma işlemi gerçekleştirirsek, yazılan veriler dosyanın sonuna eklenecektir.
Bizim yapmamız gereken şey dosyanın en başına sarıp, değiştirilmiş verilerin dosyaya yazılmasını sağlamak olmalı. Bunu da şu satır yardımıyla yapıyoruz:
f.seek(0)
Son olarak da bütün verileri dosyaya yazıyoruz:
f.writelines(veri)
Şimdiye kadar dosyaya yazma işlemleri için write()
adlı bir metottan yararlanmıştık. Burada ise writelines()
adlı başka bir metot görüyoruz. Peki bu iki metot arasındaki fark nedir?
write()
metodu bir dosyaya yalnızca karakter dizilerini yazabilir. Bu metot yardımıyla dosyaya liste tipinde herhangi bir veri yazamazsınız.
Eğer mutlaka write()
metodunu kullanmak isterseniz, liste üzerinde bir for
döngüsü kurmanız gerekir. O zaman yukarıdaki kodları şöyle yazmanız gerekir:
with open("fihrist.txt", "r+") as f:
veri = f.readlines()
veri.insert(2, "Sedat Köz\t: 0322 234 45 45\n")
f.seek(0)
for öğe in veri:
f.write(öğe)
writelines()
adlı metot ise bize dosyaya liste tipinde verileri yazma imkanı verir.
Unutmayın, Python’da herhangi bir işlemi pek çok farklı şekilde gerçekleştirebilirsiniz. Biz yukarıda olası yöntemlerden bazılarını ele aldık.
Dosyaya Erişme Kipleri
Python’da dosyalara erişimin türünü ve niteliğini belirleyen bazı kipler var.
Bu kipler dosyaların açılırken hangi yetkilere sahip olacağını veya olmayacağını belirliyor. Gelin isterseniz bu kipleri tek tek ele alalım.
Kip | Açıklaması |
"r" | Bu öntanımlı kiptir. Bu kip dosyayı okuma yetkisiyle açar. Ancak bu kipi kullanabilmemiz için, ilgili dosyanın disk üzerinde halihazırda var olması gerekir. Eğer bu kipte açılmak istenen dosya mevcut değilse Python bize bir hata mesajı gösterecektir. Dediğimiz gibi, bu öntanımlı kiptir. Dolayısıyla dosyayı açarken herhangi bir kip belirtmezsek Python dosyayı bu kipte açmak istediğimizi varsayacaktır. |
"w" | Bu kip dosyayı yazma yetkisiyle açar. Eğer belirttiğiniz adda bir dosya zaten disk üzerinde varsa, Python hiçbir şey sormadan dosya içeriğini silecektir. Eğer belirttiğiniz adda bir dosya diskte yoksa, Python o adda bir dosyayı otomatik olarak oluşturur. |
"a" | Bu kip dosyayı yazma yetkisiyle açar. Eğer dosya zaten disk üzerinde mevcutsa içeriğinde herhangi bir değişiklik yapılmaz. Bu kipte açtığınız bir dosyaya eklediğiniz veriler varolan verilere ilave edilir. Eğer belirttiğiniz adda bir dosya yoksa Python otomatik olarak o adda bir dosyayı sizin için oluşturacaktır. |
"x" | Bu kip dosyayı yazma yetkisiyle açar. Eğer belirttiğiniz adda bir dosya zaten disk üzerinde varsa, Python varolan dosyayı silmek yerine size bir hata mesajı gösterir. Zaten bu kipin “w” kipinden farkı, varolan dosyaları silmemesidir. Eğer belirttiğiniz adda bir dosya diskte yoksa, bu kip yardımıyla o ada sahip bir dosya oluşturabilirsiniz. |
"r+" | Bu kip, bir dosyayı hem yazma hem de okuma yetkisiyle açar. Bu kipi kullanabilmeniz için, belirttiğiniz dosyanın disk üzerinde mevcut olması gerekir. |
"w+" | Bu kip bir dosyayı hem yazma hem de okuma yetkisiyle açar. Eğer dosya mevcutsa içerik silinir, eğer dosya mevcut değilse oluşturulur. |
"a+" | Bu kip bir dosyayı hem yazma hem de okuma yetkisiyle açar. Eğer dosya zaten disk üzerinde mevcutsa içeriğinde herhangi bir değişiklik yapılmaz. Bu kipte açtığınız bir dosyaya eklediğiniz veriler varolan verilere ilave edilir. Eğer belirttiğiniz adda bir dosya yoksa Python otomatik olarak o adda bir dosyayı sizin için oluşturacaktır. |
"x+" | Bu kip dosyayı hem okuma hem de yazma yetkisiyle açar. Eğer belirttiğiniz adda bir dosya zaten disk üzerinde varsa, Python varolan dosyayı silmek yerine size bir hata mesajı gösterir. Zaten bu kipin “w+” kipinden farkı, varolan dosyaları silmemesidir. Eğer belirttiğiniz adda bir dosya diskte yoksa, bu kip yardımıyla o ada sahip bir dosya oluşturup bu dosyayı hem okuma hem de yazma yetkisiyle açabilirsiniz. |
"rb" | Bu kip, metin dosyaları ile ikili (binary) dosyaları ayırt eden sistemlerde ikili dosyaları okuma yetkisiyle açmak için kullanılır. “r” kipi için söylenenler bu kip için de geçerlidir. |
"wb" | Bu kip, metin dosyaları ile ikili dosyaları ayırt eden sistemlerde ikili dosyaları yazma yetkisiyle açmak için kullanılır. “w” kipi için söylenenler bu kip için de geçerlidir. |
"ab" | Bu kip, metin dosyaları ile ikili dosyaları ayırt eden sistemlerde ikili dosyaları yazma yetkisiyle açmak için kullanılır. “a” kipi için söylenenler bu kip için de geçerlidir. |
"xb" | Bu kip, metin dosyaları ile ikili dosyaları ayırt eden sistemlerde ikili dosyaları yazma yetkisiyle açmak için kullanılır. “x” kipi için söylenenler bu kip için de geçerlidir. |
"rb+" | Bu kip, metin dosyaları ile ikili dosyaları ayırt eden sistemlerde ikili dosyaları hem okuma hem de yazma yetkisiyle açmak için kullanılır. “r+” kipi için söylenenler bu kip için de geçerlidir. |
"wb+" | Bu kip, metin dosyaları ile ikili dosyaları ayırt eden sistemlerde ikili dosyaları hem okuma hem de yazma yetkisiyle açmak için kullanılır. “w+” kipi için söylenenler bu kip için de geçerlidir. |
"ab+" | Bu kip, metin dosyaları ile ikili dosyaları ayırt eden sistemlerde ikili dosyaları hem okuma hem de yazma yetkisiyle açmak için kullanılır. “a+” kipi için söylenenler bu kip için de geçerlidir. |
"xb+" | Bu kip, metin dosyaları ile ikili dosyaları ayırt eden sistemlerde ikili dosyaları hem okuma hem de yazma yetkisiyle açmak için kullanılır. “x+” kipi için söylenenler bu kip için de geçerlidir. |
Bütün bu tabloya baktığınızda ilk bakışta sanki bir sürü farklı erişim kipi olduğunu düşünmüş olabilirsiniz.
Ama aslında tabloyu biraz daha incelerseniz, temel olarak “r”, “w”, “a”, “x” ve “b” kiplerinin olduğunu, geri kalan kiplerin ise bunların kombinasyonlarından oluştuğunu göreceksiniz.
Bu eğitim seti Kaynak tarafından oluşturulmuştur.