CSV dosyaları tıpkı Excel’dekine benzer şekilde tablo formatındaki verileri metin dosyalarında depolamamızı sağlayan bir formattır.  Dosyanın her bir satırı Excel’deki satırlar gibi veri kaydını oluşturur, bu satırlar ise bir ya da daha fazla veri alanına yani veri hücresine sahip olabilir. Her bir hücrenin arasına da virgül koyularak ayırt edilir.

Yani şu tablo;

AdSoyadMeslekŞehir
ObenSevenFull Stack DeveloperAnkara
MertDemirİzmir

CSV formatında şu şekilde bulunur;

Ad,Soyad,Meslek,Şehir
Oben,Seven,Full Stack Developer,Ankara
Mert,Demir,,İzmir

Python’da CSV dosyaları ile çalışmak için csv hazır modülü bulunur. Python ile CSV dosyalarını nasıl kullanacağımızı öğrenirken kullanmak üzere örnek bir CSV dosyası oluşturalım. CSV dosyaları Microsoft Excel ve LibreOffice Calc gibi uygulamalar tarafından okunabildiği ve kaydedilebildiği için, dilerseniz bu programları kullanarak hızlıca bir dosya oluşturup CSV formatında kaydedebilirsiniz.

Yukarıdaki tabloyu CSV formatında personeller.csv ismiyle kaydedelim.

Şimdi Python ile bu CSV dosyasını okuyalım;

import csv

with open("personeller.csv") as dosyam:
  okuyucu = csv.reader(dosyam)
  for satir in okuyucu:
    print(satir)

Çıktı:

['Ad', 'Soyad', 'Meslek', 'Şehir']
['Oben', 'Seven', 'Full Stack Developer', 'Ankara']
['Mert', 'Demir', 'Backend Developer', 'İzmir']

Gördüğünüz gibi tıpkı bir metin dosyasını okur gibi dosyamızı with..as bağlam yöneticisi ile açtık ve csv modülünün reader metodunu kullanarak dosyayı okuyup print() fonksiyonu ile ekrana yazdırdık.

Bu çıktıyı biraz daha güzel bir formatta görüntülemek isterseniz de tabulate modülünden tabulate() fonksiyonunu kullanabilirsiniz;

import csv
from tabulate import tabulate

satirlar=[]

with open("personeller.csv") as dosyam:
  okuyucu = csv.reader(dosyam)
  for satir in okuyucu:
    satirlar.append(satir)

print(tabulate(satirlar))

Çıktı:

----  -----  --------------------  ------
Ad    Soyad  Meslek                Şehir
Oben  Seven  Full Stack Developer  Ankara
Mert  Demir  Backend Developer     İzmir
----  -----  --------------------  ------

 

Python ile elinizde mevcut olan verileri CSV dosyasına yazmak da en az okumak kadar kolay bir işlemdir. Önce bir csv dosyası oluşturup, bu dosyayı yazma(w) modunda açmalı ve farklı olarak csv modülünün writer metodunu kullanmalıyız;

veriler=[['Ad', 'Soyad', 'Meslek', 'Şehir'],['Oben', 'Seven', 'Full Stack Developer', 'Ankara'],['Mert', 'Demir', 'Backend Developer', 'İzmir']]

with open("yeni.csv", mode="w") as dosyam:
  yazici = csv.writer(dosyam)
  yazici.writerows(veriler)

Oldukça basit bir şekilde uygun formatta listelerden oluşan bir liste verisini csv formatında kaydedebildiğimiz bu kod çalıştırıldığında aynın klasör içinde yeni.csv adında bir dosya oluşturulur.

Eğer elinizde sadece verilerden oluşan bir liste var ise,

veriler=[[‘Oben’, ‘Seven’, ‘Full Stack Developer’, ‘Ankara’],[‘Mert’, ‘Demir’, ‘Backend Developer’, ‘İzmir’]]

bu verilerin içeriğini ifade eden başlık satırını csv modülünün writerow metodu ile kendiniz de oluşturabilirsiniz;

veriler2=[['Oben', 'Seven', 'Full Stack Developer', 'Ankara'],['Mert', 'Demir', 'Backend Developer', 'İzmir']]
basliklar=['Ad','Soyad','Meslek','Şehir']
with open("yeni2.csv", mode="w") as dosyam:
  yazici = csv.writer(dosyam)
  yazici.writerow(basliklar)
  yazici.writerows(veriler2)

 

Daha önce ilk örnek kodumuz içinde csv modülünün reader() metodu ile okuduğumuz csv dosyasının aynısını verileri sözlük formatında okumayı sağlayan DictReader() metodu ile okursak elde ettiğimiz sonuç da sizlük formatında olacaktır;

with open("personeller.csv") as dosyam:
  okuyucu = csv.DictReader(dosyam)
  for satir in okuyucu:
    print(satir)
print()

Çıktı:

{'Ad': 'Oben', 'Soyad': 'Seven', 'Meslek': 'Full Stack Developer', 'Şehir': 'Ankara'}
{'Ad': 'Mert', 'Soyad': 'Demir', 'Meslek': 'Backend Developer', 'Şehir': 'İzmir'}

Gördüğünüz gibi bu metod CSV dosyasında bulunan başlıkları her bir veri satırında değişken adı olarak kullanıyor.

CSV dosyası oluştururken de; elinizdeki veriler liste formatında değil de anahtar:değer ikilileri şeklinde sözlük formatında ise, csv modülünün DictWriter() fonksiyonu ile CSV dosyasına kaydedebiliriz;

veriler=[{'Ad':"Oben",'Soyad':"Seven",'Şehir':'Ankara','Meslek':'Full Stack Developer'},{'Ad':"Mert",'Soyad':"Demir",'Şehir':'İzmir','Meslek':'Backend Developer'}]

with open("yeni2.csv", "w") as dosyam:
  yazici=csv.DictWriter(dosyam, fieldnames=['Ad','Soyad','Meslek','Şehir'])
  yazici.writeheader()
  yazici.writerows(veriler)

Burada verilerin CSV dosyası içinde hangi sırada yer almasını istediğimizi DictWriter() metodunun fieldnames parametresi ile belirliyoruz. Bize verilen verilerde şehir önce meslek sonra yer alıyordu ancak filednames parametresi ile yerini değiştirerek dosyaya kaydettik;

Ad,Soyad,Meslek,Şehir
Oben,Seven,Full Stack Developer,Ankara
Mert,Demir,Backend Developer,İzmir

 

Tabii CSV dosyaları gerçek hayat uygulamalarında genellikle bu şekilde bir kaç kayıttan çok daha fazlasını içerir. Binlerce satır kayıt bulunan bir dosyadan bilgi edinmek için Python ile kod yazarak ilgilendiğimiz veriyi çekmeliyiz. Örneğin; personel listesi CSv dosyamızda deneyim sürelerinin de yer aldığını varsayalım.

Ad,Soyad,Meslek,Şehir,Deneyim
Oben,Seven,Full Stack Developer,Ankara, 9
Mert,Demir,Backend Developer,İzmir, 11
Vural,Şahin,Frontend Developer,İstanbul,7
Burcu,Özden,Frontend Developer,Kocaeli,6
Buğra,Moralı,Backend Developer,İstanbul,9
Deniz,Türkeli,Backend Developer,Ankara,4

Bu dosya içindeki en deneyimli personelin kim olduğunun sorulduğunu düşünelim. Şu anda gözle görülebiliyor tabii, ama binlerce satır veri bulunduğunu ve her bir personel için çok sayoda veri alanı bulunduğunu varsayıyoruz;

import csv

dosyam = csv.DictReader(open("personel_listesi.csv"))

enBuyukDeneyimYili = None
enDeneyimliPersonel = None
for veri in dosyam:
    deneyim = int(veri["Deneyim"])
    if enBuyukDeneyimYili == None or enBuyukDeneyimYili < deneyim:
        enBuyukDeneyimYili = deneyim
        enDeneyimliPersonel = veri["Ad"] + " " + veri["Soyad"]

if enBuyukDeneyimYili != None:
  print(("En deneyimli personel {} ve deneyim süresi {} yıldır.").format(enDeneyimliPersonel, enBuyukDeneyimYili))
else:
    print("Dosyada veri bulunamadı")

Çıktı:

En deneyimli personel Mert Demir ve deneyim süresi 11 yıldır.

 

Burada yer alan örnekleri şu adreste inceleyebilirsiniz;

https://repl.it/@ObenSEVEN/csv