veinpsyco
Çaylak
- Katılım
- Eyl 28, 2026
- Mesajlar
- 50
- Beğeni
- 4
- Puan
- 1,281
- Konum
- istanbul
- Meslek
- Web Geliştirici · WordPress · SEO · Sunucu Yönetimi
Ürün aktarımında satır["sku"] ifadesi KeyError verirken dosyayı tablo programında açınca ilk başlık düzgün görünebilir. İlk bakılacak yer birinci ürünün değeri değil, CSV okuyucusunun başlıktan oluşturduğu anahtarlardır. Aşağıdaki Python 3 örneği aynı ürünü üç şekilde okuyor. Dosya oluşturmadan çalıştırabilirsiniz.
İlk okumada anahtarlar ['\ufeffsku', 'stok'] olur ve sku araması None döndürür. Başlangıçtaki üç bayt (EF BB BF), utf-8 ile çözülünce ilk başlığın önünde görünmez bir karakter olarak kalır. İkinci okumada utf-8-sig bu imzayı atlar; anahtarlar ['sku', 'stok'], ürün kodu da K-17 olur.
Üçüncü okumada kodlama yine doğru, ancak virgül seçilmiştir. Anahtar listesi bu kez ['sku;stok'] olur. İki başlığın tek anahtar halinde gelmesi, bu örnekte ayracın yanlış seçildiğini gösterir.
Kendi dosyanızda sadece başlığı incelemek için şu iki bilgiyi dosyanıza uyarlayın: dosya yolu ve ayraç. Bu kontrol kaynak dosyaya yazmaz.
Dosya BOM'suz UTF-8 ise utf-8-sig ile ilk harf korunur. Dosya farklı bir kodlamadaysa bu ayar onu UTF-8'e dönüştürmez. Örneğin başlıklar doğru görünüp ürün adlarında çözme hatası alıyorsanız dışa aktarırken hangi kodlamanın seçildiğini ayrıca kontrol edin.
Python:
import codecs
import csv
import io
veri = codecs.BOM_UTF8 + b"sku;stok\nK-17;8\n"
def ilk_satir(kodlama, ayrac):
akis = io.StringIO(veri.decode(kodlama), newline="")
return next(csv.DictReader(akis, delimiter=ayrac))
for kodlama, ayrac in [("utf-8", ";"), ("utf-8-sig", ";"), ("utf-8-sig", ",")]:
satir = ilk_satir(kodlama, ayrac)
print(repr(list(satir)), satir.get("sku"))
İlk okumada anahtarlar ['\ufeffsku', 'stok'] olur ve sku araması None döndürür. Başlangıçtaki üç bayt (EF BB BF), utf-8 ile çözülünce ilk başlığın önünde görünmez bir karakter olarak kalır. İkinci okumada utf-8-sig bu imzayı atlar; anahtarlar ['sku', 'stok'], ürün kodu da K-17 olur.
Üçüncü okumada kodlama yine doğru, ancak virgül seçilmiştir. Anahtar listesi bu kez ['sku;stok'] olur. İki başlığın tek anahtar halinde gelmesi, bu örnekte ayracın yanlış seçildiğini gösterir.
Kendi dosyanızda sadece başlığı incelemek için şu iki bilgiyi dosyanıza uyarlayın: dosya yolu ve ayraç. Bu kontrol kaynak dosyaya yazmaz.
Python:
with open("urunler.csv", encoding="utf-8-sig", newline="") as dosya:
okuyucu = csv.DictReader(dosya, delimiter=";")
print(repr(okuyucu.fieldnames))
Dosya BOM'suz UTF-8 ise utf-8-sig ile ilk harf korunur. Dosya farklı bir kodlamadaysa bu ayar onu UTF-8'e dönüştürmez. Örneğin başlıklar doğru görünüp ürün adlarında çözme hatası alıyorsanız dışa aktarırken hangi kodlamanın seçildiğini ayrıca kontrol edin.