Rehber Python'da dosya işlemleri

Herkese merhaba,
Bu makalede Python'da dosya işlemlerini ve 'os' sınıfını anlattım.

open() kullanımı:
Bir dosyayı açmak için open() fonksiyonunu kullanılır. Temel parametre olarak dosya yolu(Default olarak projenin çalıştığı yer dizindir.) ve open-mode alır. Alabileceği başka parametreler de var.
close() ile dosyayı kapatmayı unutmayın.
Python:
Python:
billing_information = open(file_path, open_mode)
  • 'w' kipi:
'write'ın 'w'si olduğundan dosya içine veri yazmak için kullanabiliriz. Dosya yoksa yeni dosya oluşturur. Zaten varsa dosyanın içindekileri siler. Başlangıçta proje klasörü şu şekilde:
Kod:
- main.py

Python:
Python:
billing_information = open('bill_info.txt', 'w')
billing_information.close()
Yukarıdaki komutları çalıştırdığımda ise şu şekilde:
Kod:
- billing_information.txt
- main.py

write() ile yazma işlemi yapabiliriz:
Python:
Python:
billing_information = open('bill_info.txt', 'w')
billing_information.write('Rent: 2000₺')
billing_information.close()
Sonuç olarak dosyanın içinde 'Rent: 2000₺' yazdığını görebilirsiniz:
Kod:
--------------------billing_information--------------------
Rent: 2000₺

  • 'r' kipi:
'read'in 'r'si olmasından okuma işlemleri için kullanıldığını anlayabiliriz. Eğer kip belirtmezseniz dosyayı 'r' kipinde açar. read(), readline() ve readlines() ile dosyayı okuyabilirsiniz.
Bu şekilde bir dosyamız olsun:


Eğer bunu read() ile okursanız çok satırlı string olarak değer döndürür. Şu komutlar ile:
Python:
Python:
f = open('bill_info.txt', 'r')
print(f.read())
f.close()
Şu çıktıyı alırız:
Kod:
Water: 120TL
Electric: 780TL
Rent: 2000TL

Eğer readline() kullanırsak satır satır olarak okur. Şu komutlar ile:
Python:
Python:
f = open('bill_info.txt', 'r')
print(f.readline())
f.close()
Şu çıktıyı alırız:
Kod:
Water: 120TL

Eğer readlines() kullanırsak list değer return eder:
Kod:
'Water: 120TL', 'Electric: 780TL', 'Rent: 2000TL'
  • Diğer kipler:
'a', 'append'in baş harfidir. 'w'dan farklı olarak bu kipi kullanarak dosya sonuna ekleme yaparız.
'w+' ise dosyayı hem okuma hem yazma kipinde açar ve dosyanın içindekileri siler. Dosya yoksa yenisini oluşturur.
'r+' ise 'w+' ile aynı özelliklerde açar ancak dosyanın diskte bulunması gerekir.
Daha pek çok kip var ancak en çok kullanılan kipler bunlar.
'os' kütüphanesi:
'os' kütüphanesiyle OS özelliklerini ve disk içeriği gibi şeyleri öğrenebiliriz. Şimdilik dosyalarla alakalı olanları anlatacağım. Kütüphaneyi projeye import etmeyi unutmayın.
  • os.listdir() kullanımı:
Parametre olarak bir dizin alır ve bu dizinin içindeki dizinleri ve dosyaları list olarak return eder. İçindeki değerin bir dizin olduğundan emin olun, 'os' kütüphanesiyle bunun kontrolünü yapabiliyoruz.
  • os.path.isdir() kullanımı:
Parametre olarak bir path alır ve bunun dizin olup olmadığını true veya false olarak döndürür. Bu komutu ve os.listdir()'i birlikte kullanırsak:
Python:
import os

while True:
    path = input('>> ')
    if os.path.isdir(path):
        for file_name in os.listdir(path):
            print(file_name)
    else:
        print('The path is not a directory..')
Çıktı dosyanın türüne göre değişir.
  • os.path.isfile() kullanımı:
os.path.isdir()'in tam tersi olarak pathin dosya olup olmadığını kontrol eder.
  • os.path.exists kullanımı:
Bu komut ise path türü fark etmeksizin diskte bulunup bulunmadığını sorgular. Üstteki iki komutun birleşimi gibi düşünülebilir.

O halde makaleyi örnek bir çalışmayla bitirelim: Hesap yöneticisi.
Kullanacağımız sınıfları ve fonksiyonları tutacak bir kaynak dosyası oluşturalım. Bunun adı acc_manager_sys.py olsun.
'os' kütüphanesini ekleyelim.
Bu kaynak dosyaya account adında bir sınıf ekleyelim. Bu ad ve şifre içerecek. Ayrıca istediğimizde account bilgilerini yazdıracak:
Python:
class account:
    def __init__(self, nick, password):
        self.nick = nick
        self.password = password

    def printaccinfos(self):
        print('Nick:', self.nick)
        print('Password:', self.password)
Accountların her birini ayrı dosyalarda accs isimli bir klasörde tutacağız.
Gerekli işlemleri fonksiyonlara atayalım:
Python:
def get_infos_in_acc_file(accnick):
    accs = os.listdir('accs')
    for acc in accs:
        if acc == accnick:
            accfile = open('accs/' + acc)
            nick = accfile.readline().strip()
            password = accfile.readline().strip()
            accfile.close()
            return account(nick, password)
    return None


def delete_acc(accnick):
    if os.path.exists('accs/' + accnick):
        os.remove('accs/' + accnick)
    else:
        print('This account is not defined.')


def new_acc(accnick, nick, password):
    if os.path.exists('accs/' + accnick):
        print('This account already exists.')
    else:
        new_acc_file = open('accs/' + accnick, 'w')
        new_acc_file.write(nick + '\n' + password)
        new_acc_file.close()
Konsola komut yazıp çalıştırmamız lazım. Acc ekleyebilir, silebilir veya bilgileri listeleyebiliriz. Bunun için başka bir sınıf oluşturuyoruz:
Python:
class command:
    def __init__(self, command):
        self.command = command

    def run_command(self):
        if self.command == 'append':
            acc_name = input('Acc Name>> ').strip()
            nick = input('Nick>> ').strip()
            password = input('Password>> ').strip()
            new_acc(acc_name, nick, password)
        elif self.command == 'get':
            acc_name = input('Acc Name>> ').strip()
            print(get_infos_in_acc_file(acc_name).printaccinfos())
        elif self.command == 'delete':
            acc_name = input('Acc Name>> ').strip()
            delete_acc(acc_name)
        else:
            print('Command not found.')
main.py kaynak doyasına ise bunları çalıştıracak ve döngüye alacak kodu yazalım:
Python:
import acc_manager_sys


while True:
    comtext = input('>> ').strip()
    com = acc_manager_sys.command(comtext)
    com.run_command()
Projeye buradan ulaşabilirsiniz. Daha geliştirilmesi lazım elbette.

Umarım makalem yardımcı olmuştur. Okuduğunuz için teşekkür ederim.
 

Dosya Ekleri

  • 1660158789335.png
    6,9 KB · Görüntüleme: 73
Son düzenleyen: Moderatör:
Güzel rehber hocam ellerinize sağlık.
 
Harika bilgi çok teşekkürler. Fakat Mobil uygulamadan ilk 6 PNG dosyası görünmüyor.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…