Python İle Excel Dosya (XLSX ve CSV) Satır Satır Okuma ve Yazma İşlemleri

Çoğu bilginin veritabanları yerine Excel ile tutulması sebebiyle programlamalarda birçok kez Excel dosyasından (XLSX veya CSV) verileri almamız gerekebiliyor. Bu yazımızda da Python ile Excel dosyasından satır satır nasıl veri okuyabileceğinizi ve yazabileceğinizi anlatacağız.

Excel dosyaları, bilgilerin tutulduğu ve kullanımının en kolay olduğu gelişmiş bir veritabanıdır. Gerek pratikliği gerekse ihtiyaç duyulduğunda erişiminin ve okunmasının kolay olması sebebiyle bilgisayar kullanımımızın çoğunda yanı başımızda oluyor. Programlama yaparken de doğru kullanılması ile kullanışlı ve pratik bir veritabanı haline gelebilir. Öyleyse nasıl kullanacağımızı anlatmaya başlayalım.

1. Python İle Excel Kütüphanesinin Dahil Edilmesi

Python ile Excel dosyası işlemleri için openpyxl kütüphanesini kullanacağınız. Bunun için ilk olarak kütüphaneyi indiriyoruz.

pip install openpyxl

Ardından projemize import edelim.

from openpyxl import Workbook,load_workbook

Artık dosyamızı seçerek Excel dosyası ile oynamaya başlayabiliriz. Üzerinde çalışacağımız örnek Excel dosyasının içeriği ise şu şekildedir.

2. Excel Dosyasının Seçilmesi ve Çalışma Sayfası Belirleme

Kütüphaneyi programımıza dahil ettikten sonra Excel dosyamızı load_workbook() fonksiyonu ile seçiyoruz. Dosyamızı seçtikten sonra ise açık olan çalışma alanında seçebilmek için active değişkenini kullanıyoruz.

wb = load_workbook("isimler.xlsx")
ws = wb.active

# Aktif çalışma sayfasının adını yazdırma
print(wb.sheetnames)      # <Worksheet "İsimler">

Komutu çalıştırdığınızda karşınızda aktif olan çalışma sayfasının ismini görebilirsiniz. Eğer siz isim belirterek çalışma alanını seçmek istiyorsanız önce çaışma sayfalarının ismini sheetnames ile görebilir ve ardından diziden seçebilirsiniz.

wb = load_workbook("isimler.xlsx")
ws = wb.sheetnames

print(ws)   # ['İsimler', 'Şehirler']

ws = wb["Şehirler"]

print(ws)   # <Worksheet "Şehirler">

Bu aşamada isterseniz direkt aktif çalışma sayfası üzerinde çalışabilir, isterseniz de özel bir çalışma sayfasını seçerek programınıza devam edebilirsiniz. Biz aşağıdaki örneklerde aktif çalışma sayfası olan “İsimler” üzerinde çalışacağız. Bunun için başlangıç komutumuz şu şekildedir;

wb = load_workbook("isimler.xlsx")
ws = wb.active

print(ws)     # <Worksheet "İsimler">

3. Satır Satır Okuma veya Belirli Bir Satırı Okuma

Artık dosyamızı ve çalışma sayfamızı belirledikten sonra tablodaki verileri rahatlıkla okuyabiliriz. Bunun için direkt ws değişkeninde satır/sütun numarası belirterek veya cell(satir,sütun) fonksiyonunu kullanabiliriz.

İlk olarak tek bir hücreyi seçmek için iki seçeneğimiz var. Bu iki seçenekte şu şekilde kullanılabilir:

# 1. Kullanım
print(ws["A3"].value)        # Deniz

# 2. Kullanım
print(ws.cell(3,1).value)    # Deniz

Her iki kullanımda belirli bir hücreyi satır ve sütun numarası belirterek hızlıca seçebilirsiniz. Birden çok satır ve sütun seçmek için ise cell() fonksiyonunu döngüye sokabilirsiniz. Örneğin tablomuzdaki başlık satırı hariç 3 değerlerin yer aldığı 3 satır ve 3 sütunu seçmek için şu kodu kullanabilirsiniz:

for satir in range(2,5):
    for sutun in range(1,4):        
        print(" | " + str(ws.cell(satir,sutun).value) + " | ",end="")
    print()

Bu komutla ekran çıktımız şu şekilde olacaktır:

Yukarıdaki çıktının aynısını satır ve sütun aralıklarını çoklu seçerekte elde edebiliriz:

for satir in ws['A2':'C4']:
    for hucre in satir:
        print(" | " + str(hucre.value) + " | ",end="")
    print()

!!NOT: Excel tablonuzdaki tüm satır ve sütunları yazdırmak istediğinizde toplam satır ve sütun sayısını elinizle belirtmek yerine max_row ve max_column değişkenlerini kullanarak bu işlemi Python ile çözebilirsiniz. Örneğin:

for satir in range(1,ws.max_row+1):
    for sutun in range(1,ws.max_column+1):
        print(" | " + str(ws.cell(satir,sutun).value) + " | ",end="")
    print()

4. Yeni Bir Excel Dosyası Oluşturma

Mevcut bir Excel dosyası üzerinde Python ile çok rahat okuma işlemlerini yapabiliyoruz. Peki yeni bir Excel dosyası oluşturup yazma işlemi yapmak isterseniz ne yapmalısınız? Hemen yeni bir Excel dosyası oluşturarak başlayalım.

wb = Workbook()

ws = wb.active
ws.title = "İlk Çalışma Alanı"
ws = wb.create_sheet("Posta Kodları")
ws = wb.create_sheet("Ülkeler")

print(wb.sheetnames)     # ['İlk Çalışma Alanı', 'Posta Kodları', 'Ülkeler']

Bu durumda üç adet çalışma alanı oluşturduk ve isimlerini verdik. Excel kitabı ilk oluşturulduğunda ilk çalışma sayfası öntanımlı olarak oluşturulur ve adı “Sheet” dir. Bu ismi değiştirmek için aktif çalışma alanını wb.active ile seçip title değişkeni ile bu sayfaya isim verdik.

Oluşturduğumuz Excel kitabını ve çalışma alanlarını bir dosyaya kaydetmek için save() fonksiyonunu kullanıyoruz.

wb.save("dosyaAdi.xlsx")

Artık oluşturduğunuz Excel dosyanız bulunduğunuz dizine kaydedilmiş oldu.

5. Excel Dosyasına Yeni Satır & Sütun & Hücre ve Değerler Ekleme

Yukarıdaki adımlar ile yeni oluşturduğunuz veya zaten mevcut olan bir Excel dosyasına yeni veriler yazmak istediğinizde tek yapmanız gereken bu verileri nereye ekleyeceğinizi belirtmek olacaktır. Aşağıdaki örnekleri inceleyerek sizde rahatça Excel dosyasına yeni veriler girebilirsiniz.

ws['A1'] = 42
ws['B3'] = "Merhaba"
ws.append([1, 2, 3, "Merhaba", "Dünya"])  # Sıradaki satıra sırasıyla dizi elemanlarını ekler

Bu komutların ardından tablomuz şu şekilde gözükecektir

6. Excel Dosyası İle Yapabileceğiniz Ek İşlemler

Temel olarak yeni bir Excel dosyası oluşturma, var olan dosyayı açma, veri ekleme ve okuma işlemlerinin ardından yapabileceğimiz diğer işlemlere hızlıca bir göz atalım.

Aktif olan çalışma sayfasının başlık kutucuğu arka plan rengini değiştirebilirsiniz.

ws.sheet_properties.tabColor = "1072BA"

Aktif çalışma sayfasını kopyalayabilirsiniz.

source = wb.active
target = wb.copy_worksheet(source)

Dilediğiniz satır ve sütunları silmek için satır ve sütun numarası belirterek aşağıdaki fonksiyonları kullanabilirsiniz.

ws.insert_rows(satirno)
ws.delete_rows(satirno)
ws.insert_cols(sutunno)
ws.delete_cols(sutunno)

Tabi istediğiniz hücreye formül ekleyerek özgürce çalışabilirsiniz bile

ws["P2"] = "=AVERAGE(H2:H100)"

Excel üstünde yapabileceğiniz stil işlemlerini bile yapabilirsiniz

kalin = Font(bold=True)
buyuk_kirmizi_yazi = Font(color=colors.RED, size=20)
hizala_orta = Alignment(horizontal="center")
cift_kenarlik = Side(border_style="double")
kenarlik = Border(top=cift_kenarlik,
                        right=cift_kenarlik,
                        bottom=cift_kenarlik,
                       left=cift_kenarlik)

>>> ws["A2"].font = kalin
>>> ws["A3"].font = buyuk_kirmizi_yazi
>>> ws["A4"].alignment = hizala_orta
>>> ws["A5"].border = kenarlik

Peki istediğimiz bir hücreye resim eklemek istersek ne yapmalıyız? Hemen gösterelim ama belirttiğimiz kütüphaneyide eklemeyi unutmayın.

from openpyxl.drawing.image import Image

logo = Image("logo.png")
logo.height = 150
logo.width = 150

ws.add_image(logo, "A3")

6. Çalışmayı CSV Olarak Kaydetme

Çıktı olarak XLSX yerine CSV formatına ihtiyaç duyabilirsiniz. Mevcut olan bir XLSX dosyasını veya yeni oluşturduğunuz Excel kitabını CSV olarak kaydedebilmek için projenize csv kütüphanesini dahil ederek aşağıdaki kodu kullanabilirsiniz.

import openpyxl
import csv

wb = openpyxl.load_workbook('test.xlsx')
sh = wb.get_active_sheet()
with open('test.csv', 'w', newline="") as f:
    c = csv.writer(f)
    for r in sh.rows:
        c.writerow([cell.value for cell in r])

Python ile Excel üzerinde yapabileceğiniz birçok işlemi bu yazımızda detaylı örneklerle anlattık. Aklınıza takılan veya sormak istediğiniz sorular için aşağıdaki yorum kutusunu kullanabilirsiniz.