Gereksinimler ve Ön Hazırlık
Python ile dosya ayrıştırma işlemlerine başlamadan önce geliştirme ortamınızın güncel olduğundan emin olmalısınız. 2026 standartlarına göre Python 3.12 veya üzeri bir sürüm kullanmanız, performans ve güvenlik güncellemelerinden yararlanmanızı sağlar.
- Python 3.12+: Resmi Python sitesinden güncel sürümü indirin.
- IDE: VS Code veya PyCharm gibi gelişmiş bir düzenleyici kullanın.
- Kütüphaneler: Pandas (veri işleme), JSON (standart kütüphane) ve Pathlib (dosya yolu yönetimi) temel araçlarımız olacak.
Kurulumu doğrulamak için terminalde python --version komutunu çalıştırın. Ayrıca, sanal ortam (virtual environment) oluşturarak projelerinizi izole etmeniz, bağımlılık çakışmalarını önlemek için en iyi pratiktir.
# Sanal ortam oluşturma
python -m venv venv
# Aktif etme (Windows için)
venv\Scripts\activate
# Gerekli kütüphaneyi kurma
pip install pandas
Adım Adım CSV Dosyalarını Ayrıştırma
CSV (Comma Separated Values), verilerin virgüllerle ayrıldığı en temel veri formatıdır. Python'da pandas kütüphanesi, büyük CSV dosyalarını bile saniyeler içinde ayrıştırmanıza olanak tanır. Aşağıdaki örnek, bir CSV dosyasını okuyup belirli sütunları filtrelemeyi gösterir.
import pandas as pd
def ayristir_csv(dosya_yolu):
try:
df = pd.read_csv(dosya_yolu)
# Sadece belirli sütunları seçme
sonuc = df[['id', 'isim', 'tarih']]
return sonuc
except FileNotFoundError:
print("Hata: Dosya bulunamadı.")
except Exception as e:
print(f"Beklenmedik bir hata: {e}")
# Kullanım
veri = ayristir_csv('veriler.csv')
print(veri.head())
Burada try-except bloğu kullanmamızın nedeni, dosya okuma sırasında oluşabilecek I/O (Girdi/Çıktı) hatalarını yönetmektir. Bu, uygulamanızın çökmesini engeller.
JSON Verilerini Otomatik İşleme
JSON, özellikle API yanıtlarında ve yapılandırılmış log dosyalarında sıklıkla karşımıza çıkar. Python'ın yerleşik json kütüphanesi, bu verileri bir Python sözlüğüne (dictionary) dönüştürerek kolayca manipüle etmemizi sağlar.
import json
def json_ayristir(json_dosyasi):
with open(json_dosyasi, 'r', encoding='utf-8') as f:
data = json.load(f)
for kayit in data:
print(f"Kullanıcı: {kayit.get('ad')}, ID: {kayit.get('id')}")
# Kullanım
json_ayristir('kullanicilar.json')
encoding='utf-8' parametresini kullanmak, Türkçe karakterlerin bozulmasını önlemek için kritik bir öneme sahiptir. Dosya işlemleri sırasında her zaman karakter kodlamasını belirtmeniz önerilir.
Log Dosyalarını Düzenli İfadeler (Regex) ile Ayrıştırma
Log dosyaları genellikle belirli bir düzene sahip metin dosyalarıdır. re modülü, karmaşık metin yapılarından istediğimiz veriyi çekmek için kullanılır. Örneğin, bir web sunucusu logundan IP adreslerini ayıklamak için şu yöntemi kullanabilirsiniz:
import re
def log_ayristir(log_satiri):
# IP adresi kalıbı
pattern = r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'
eslesme = re.search(pattern, log_satiri)
if eslesme:
return eslesme.group()
return None
satir = "192.168.1.1 - - [10/Oct/2026] 'GET /index.html'"
print(f"Bulunan IP: {log_ayristir(satir)}")
Düzenli ifadeler (Regex), metin madenciliği yaparken en güçlü aracınızdır. Ancak, çok karmaşık regex yapıları performans sorunlarına yol açabilir; bu nedenle ifadelerinizi mümkün olduğunca optimize edin.
Veri Formatlarının Karşılaştırılması
| Format | Avantaj | Dezavantaj | Kullanım Alanı |
|---|---|---|---|
| CSV | Hızlı, basit, hafif | Karmaşık veriler için zayıf | Excel verileri, basit tablolar |
| JSON | Hiyerarşik, esnek | Büyük dosyalarda yavaş | API verileri, konfigürasyon |
| Log/TXT | Sınırsız özelleştirme | Ayrıştırması en zor | Sunucu kayıtları, hata izleme |
Otomatik Dosya İzleme ve İşleme
Dosyalar bir dizine düştüğü anda otomatik olarak işlenmesini istiyorsanız, watchdog kütüphanesini kullanabilirsiniz. Bu, dosya sistemindeki değişiklikleri gerçek zamanlı takip etmenizi sağlar.
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class DosyaHandler(FileSystemEventHandler):
def on_created(self, event):
if not event.is_directory:
print(f"Yeni dosya tespit edildi: {event.src_path}")
# Burada ayrıştırma fonksiyonunuzu çağırın
# Gözlemci başlatma kodu buraya eklenebilir.
Bu yapı, özellikle 7/24 çalışan veri toplama sistemleri için idealdir. Uygulamanızın arka planda bir servis olarak çalışması, verimliliği artırır.
Güvenlik Uyarısı: Dışarıdan gelen veri dosyalarını ayrıştırırken her zaman "Input Validation" (Girdi Doğrulama) yapın. Kötü niyetli hazırlanmış dosyalar (örneğin SQL injection içeren CSV dosyaları veya büyük boyutlu JSON'lar) sisteminize zarar verebilir. Dosyaları asla doğrudan bir veritabanı sorgusuna parametre olarak göndermeyin.
Sıkça Sorulan Sorular
Python ile büyük boyutlu dosyaları nasıl ayrıştırırım?
Büyük dosyalar için tüm veriyi belleğe yüklemek yerine, pandas kütüphanesinin chunksize parametresini kullanarak veriyi parçalar halinde okuyabilirsiniz.
JSON ayrıştırırken karakter hatası alıyorum, ne yapmalıyım?
Dosyayı okurken encoding='utf-8' veya dosya yapısı farklıysa encoding='latin-1' parametresini kullandığınızdan emin olun.
Regex kullanmak zorunda mıyım?
Eğer dosya formatınız yapılandırılmışsa (CSV, JSON, XML) regex yerine ilgili kütüphaneleri kullanmak çok daha güvenli ve hızlıdır. Regex sadece yapılandırılmamış metinler için gereklidir.
Otomatik ayrıştırma sistemlerinde hata yönetimi nasıl olmalı?
Hatalı dosyaları "processed" (işlenmiş) ve "failed" (hatalı) şeklinde klasörlere ayırarak, hatalı dosyaları loglayıp bir sonraki döngüde onları tekrar işlemeye çalışmadan geçebilirsiniz.
Hangi kütüphane daha performanslı?
Veri işleme için pandas, çok büyük verilerde polars kütüphanesi 2026 yılı itibarıyla en yüksek performansı sunan araçlardır.
Veri İşleme Süreçlerinde İleri Düzey Optimizasyon Teknikleri
Otomatik veri ayrıştırma sistemleriniz büyüdükçe, standart kütüphanelerin sunduğu hız sınırlarına takılabilirsiniz. Özellikle milyonlarca satırlık dosyalarla çalışırken, belleği (RAM) verimli kullanmak sistemin çökmesini engeller. Bu noktada "Generator" yapısını kullanmak, veriyi bir kerede belleğe yüklemek yerine satır satır işlemenize olanak tanır.
Aşağıdaki örnekte, büyük bir dosyayı belleği yormadan nasıl işleyebileceğinizi görebilirsiniz:
def dosya_okuyucu(dosya_yolu):
with open(dosya_yolu, 'r', encoding='utf-8') as f:
for satir in f:
yield satir.strip().split(',')
# Kullanım: Bellek kullanımı minimum seviyede kalır
for veri in dosya_okuyucu('dev_veri_seti.csv'):
# İşleme mantığınız burada yer alır
print(veri)
Veri Ayrıştırma Sistemlerinin Test Edilmesi ve Doğrulanması
Otomatik sistemler, beklenmedik veri formatları geldiğinde hata verebilir. Bu nedenle, ayrıştırma mantığınızı birim testleri (unit tests) ile koruma altına almanız kritik öneme sahiptir. pytest kütüphanesi, veri ayrıştırma fonksiyonlarınızın farklı senaryolarda nasıl tepki verdiğini doğrulamak için en iyi araçtır.
Örnek Birim Testi Senaryosu
Aşağıdaki test yapısı, ayrıştırıcınızın hatalı veri girişlerinde doğru istisnaları (exception) fırlatıp fırlatmadığını kontrol eder:
import pytest
def test_csv_ayristirici_hatali_format():
# Hatalı veri girişi simülasyonu
hatali_veri = "isim;yas;sehir" # Beklenen virgül yerine noktalı virgül
with pytest.raises(ValueError):
# Ayrıştırıcı fonksiyonunuzun hata fırlatması beklenir
ayristirici_fonksiyonu(hatali_veri)
def test_csv_ayristirici_basarili():
gecerli_veri = "Ahmet,25,Istanbul"
sonuc = ayristirici_fonksiyonu(gecerli_veri)
assert sonuc['isim'] == "Ahmet"
assert sonuc['yas'] == 25
Üretim Ortamına (Deployment) Hazırlık
Geliştirdiğiniz ayrıştırma betiğini bir sunucuda sürekli çalışır halde tutmak için "Cron Jobs" veya "Systemd" servislerini kullanabilirsiniz. Eğer sisteminiz daha karmaşık bir yapıya sahipse, Docker konteynerleri içerisine betiğinizi yerleştirerek ortam bağımlılıklarını sabitlemeniz önerilir.
- Çevre Değişkenleri: Dosya yollarını ve veritabanı bağlantı bilgilerini asla koda gömmeyin;
.envdosyalarını kullanın. - Loglama:
loggingmodülünü kullanarak her işlemin sonucunu bir dosyaya kaydedin. - Hata Bildirimi: Kritik hatalarda e-posta veya Slack üzerinden bildirim alacak bir mekanizma kurun.
İpucu: Veri ayrıştırma sürecinde performans darboğazı yaşıyorsanız, Python'ın multiprocessing modülü ile işlemi işlemci çekirdeklerine dağıtarak hızınızı 4-5 kat artırabilirsiniz.
Sonuç
Python ile otomatik veri dosyası ayrıştırma, doğru kütüphaneler ve sağlam bir hata yönetimi ile oldukça basit bir süreçtir. Bu rehberde öğrendiğiniz CSV, JSON ve Regex teknikleri, çoğu kurumsal veri işleme ihtiyacınızı karşılayacaktır. Bir sonraki adım olarak, ayrıştırdığınız verileri bir SQL veritabanına veya NoSQL bir sisteme otomatik olarak yazdıran bir "Veri Entegrasyon Hattı" kurmayı deneyebilirsiniz.
Sorumluluk Reddi: Bu rehberdeki kod örnekleri eğitim amaçlıdır. Üretim ortamında kullanmadan önce mutlaka birim testleri (unit tests) yazın ve güvenlik açıklarına karşı girdi sanitizasyonu uygulayın.


Yorumlar (0)
Yorum Yaz