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:
1660165773328.png


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
    1660158789335.png
    6,9 KB · Görüntüleme: 27
Son düzenleyen: Moderatör:
Herkese merhaba,
Bu makalede Python'da dosya işlemlerini ve 'os' sınıfını anlattı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:
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:
1660156690700.png


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


write() ile yazma işlemi yapabiliriz:
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:
1660157285982.png


  • '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:
1660157941594.png


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


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


Eğer readlines() kullanırsak list değer return eder:
Eki Görüntüle 1481196
  • 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ü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.
Güzel rehber hocam ellerinize sağlık.
 

Yeni konular

Geri
Yukarı